Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Hallo,
ich komme bei einer Aufgabe nicht weiter. Ich möchte eigentlich nur das Verzeichnis auf einem Server listen und diese Liste lokal weiterverarbeiten.
Das funktioniert auch jedoch werden dabei alle Bilder gelistet was ich vermeiden möchte. Wenn ich shell=False setze funkitoniert der Befehl nicht. Kann mir jemand verraten wie das funkitoniert, dass die Dateien nicht alle beim ausführen gelistet werden?
@martinjo: `check_call()` ist die falsche Funktion dafür, die gibt auch gar nichts zurück. Du suchst `check_output()` und wenn Du keine unnötige Shell dazwischen haben möchtest, dann musst Du die Argumente als Liste übergeben.
Danke, check_call hatte ich eben versehentlich hingeschrieben, hier mal ein Beispiel aus dem Skript mit dem Versuch, die Argumente als Liste zu übergeben, habe jedoch nicht ganz verstanden wie das gemeint war.
@martinjo: jedes Argument ist ein Element der Liste. Da Du nur ein Element hast und der erste als Programmname verwendet wird, findet er das Programm natürlich nicht.
Deine eigentliche Frage habe ich aber noch nicht verstanden. Wenn Du nur bestimme Dateien haben willst, mußt Du halt den ls-Befehl entsprechend anpassen.
def check_server_pics(pic_list):
pic_list_server = subprocess.check_output( [ 'ssh', '%s@%s' %(user, server), 'ls' , picdir_server ] )
for i in pic_list:
if i in pic_list_server:
print i, "found on server"
else:
print i, "NOT on server"
check_server_pics(pic_list)
hatte sogar schon eine andere Methode erarbeitet aber irgenwie ist mir die erste lieber:
def check_server_pics_ssh(pic_list):
s = ssh.Connection(host = user, username = server)
pic_list_server = s.execute(ls_picdir_server)
pic_list_server = [p.replace('\n', '') for p in pic_list_server]
for i in pic_list:
if i in pic_list_server:
print i, "found on server"
else:
print i, "NOT on server"
check_server_pics_ssh(pic_list)
@martinjo: Das funktioniert nur so weil das so von der Funktion erwartet wird. Wie sollte es denn sonst funktionieren? Das sind einzelne Argumente, also muss man die auch einzeln angeben. Nach welchen Regeln sollte denn eine einzelne Zeichenkette aufgeteilt werden? Also welche Shell-Syntax von welchem Betriebssystem sollte man da als ”allgemeingültig” ansehen? Das ist ja auch einer der Gründe warum ``shell=True`` problematisch ist: Was man da als Zeichenkette übergibt kann von verschiedenen Shells leicht (oder gar stark) anders interpretiert werden.