Seite 1 von 1

unbekannte Verwendung von subprocess

Verfasst: Dienstag 11. Januar 2011, 18:42
von feldmaus
Hi Leute,

für mein Backup-Skript wollte ich den Python Befehl subprocess verwenden, weiß aber nicht genau wie dieser richtig verwendet wird. Oder ich mache was falsch. Es geht nach Ausführung von subprocess.Popen ein Fenster auf, wo ich gefragt werde ob dieser Prozess als Vater- oder Kind-Fork gestartet werden soll. Welche Antwort ist richtig und wie unterdrücke ich diese Frage?

EDIT:
Hier ein der entscheidende Ausschnitt:

Code: Alles auswählen

for eintrag in katalog:
    for BENUTZER in katalog[eintrag]['Benutzer']:
        antwort=raw_input('Sichern/Zurueckspielen/Nichts'+katalog[eintrag]['Frage'][0]+BENUTZER+katalog[eintrag]['Frage'][1])
        if antwort == ('s' or 'S') :
            try:
                subprocess.Popen(shlex.split('rsync --rsh="ssh -l '+BENUTZER+'" -avz --delete-after  --progress --stats '+katalog[eintrag]['Exclude']+' '+katalog[eintrag]['Lokal'][0]+BENUTZER+katalog[eintrag]['Lokal'][1]+' '+BENUTZER+katalog[eintrag]['Server'][0]+BENUTZER+katalog[eintrag]['Server'][1])).wait()
            except:
                print 'Unbekannter Fehler.'
        elif antwort == ('z' or 'Z'):
            try:
                subprocess.Popen(shlex.split('rsync --rsh="ssh -l '+BENUTZER+'" -avz --delete-after  --progress --stats '+katalog[eintrag]['Exclude']+' '+BENUTZER+katalog[eintrag]['Server'][0]+BENUTZER+katalog[eintrag]['Server'][1]+' '+katalog[eintrag]['Lokal'][0]+BENUTZER+katalog[eintrag]['Lokal'][1])).wait()
            except:
                print 'Unbekannter Fehler.'
        else:
            print 'Tue nichts. Weiter.'
katalog ist lediglich ein Dictionary mit den Daten die ich benötige für rsync. Weiterhin wollte ich die Fehler abfangen. Wie macht man das?

Grüße Markus

Re: unbekannte Verwendung von subprocess

Verfasst: Dienstag 11. Januar 2011, 21:33
von Dauerbaustelle
Keine Ahnung, allerdings mag ich ein paar Worte zu dem Code sagen:

Code: Alles auswählen

raw_input(AUSWAHL[0]+'/'+AUSWAHL[1]+'/Nichts'+katalog[eintrag]['Frage'][0]+BENUTZER+katalog[eintrag]['Frage'][1])
Schau dir mal String Processing im Tutorial an [1].

Code: Alles auswählen

if antwort == ('s' or 'S') :
Du meintest sicher

Code: Alles auswählen

if antwort in 'sS'
.

Code: Alles auswählen

except:
                print 'Unbekannter Syntax Fehler.', rueckgabe
Niemals alle Exceptions abfangen, immer angeben welche erwartet werden. Vor allem wird da sicherlich kein Syntax-Fehler auftreten, denn dann würde das Programm gar nicht starten.

[1] http://tutorial.pocoo.org/inputoutput.html

Re: unbekannte Verwendung von subprocess

Verfasst: Mittwoch 12. Januar 2011, 00:40
von feldmaus
Wenn ich das except wegnehme, meckert er rum.

Ich würde gerne die Zusammenfassungen und die Fehlermeldungen in eine LOG-Datei schreiben. Was ist an meinem String verkehrt?

Re: unbekannte Verwendung von subprocess

Verfasst: Mittwoch 12. Januar 2011, 08:19
von Hyperion
feldmaus hat geschrieben:Wenn ich das except wegnehme, meckert er rum.
Naja, das ist ja auch Sinn der Sache ;-)

Vielleicht meckert "er" ja aus gutem Grunde rum, bzw. aus einem Grund, den Du nicht behandelst bzw. der für einen Fehler verantwortlich ist, den Du so nicht finden kannst.

Re: unbekannte Verwendung von subprocess

Verfasst: Mittwoch 12. Januar 2011, 13:58
von Sr4l
feldmaus hat geschrieben:Hi Leute,

für mein Backup-Skript wollte ich den Python Befehl subprocess verwenden, weiß aber nicht genau wie dieser richtig verwendet wird. Oder ich mache was falsch. Es geht nach Ausführung von subprocess.Popen ein Fenster auf, wo ich gefragt werde ob dieser Prozess als Vater- oder Kind-Fork gestartet werden soll. Welche Antwort ist richtig und wie unterdrücke ich diese Frage?
Grüße Markus
Du könntest deine aufrufe mal etwas verschönern, dann werden sie auch leserlich.
z.B so:

Code: Alles auswählen

subprocess.Popen(
    shlex.split('rsync --rsh="ssh -l {0}" -avz --delete-after --progress --stats {Exclude} \
        {Lokal[0]}{0}{Lokal[1]} {0}{Server[0]}{0}{Server[1]}'.format(BENUTZER, **katalog[eintrag]))
    ).wait()
Zum anderen die Abfrage wie der Prozess gestartet wird? Wie sieht das aus? Text? GUI?
Windows / Linux? Löst der befehl die Frage auch sonst aus?

Re: unbekannte Verwendung von subprocess

Verfasst: Mittwoch 12. Januar 2011, 14:43
von Dauerbaustelle
Überhaupt würde ich da gar kein shlex verwenden. Welche Sinn macht es denn, Werte in einen String zu tun, nur den danach gleich wieder aufzuteilen? Würde doch viel mehr Sinn machen, den Befehl gleich als Liste anzugeben, dann müsste man da auch kein String Formatting machen.