Führen Sie hintergrund-Prozess in Python und NICHT warten

Mein Ziel ist einfach: kick-off rsync und NICHT WARTEN.

Python 2.7.9 auf Debian

Beispielcode:

rsync_cmd = "/usr/bin/rsync -a -e 'ssh -i /home/myuser/.ssh/id_rsa' {0}@{1}:'{2}' {3}".format(remote_user, remote_server, file1, file1)
rsync_cmd2 = "/usr/bin/rsync -a -e 'ssh -i /home/myuser/.ssh/id_rsa' {0}@{1}:'{2}' {3} &".format(remote_user, remote_server, file1, file1)
rsync_path = "/usr/bin/rsync"
rsync_args = shlex.split("-a -e 'ssh -i /home/mysuser/.ssh/id_rsa' {0}@{1}:'{2}' {3}".format(remote_user, remote_server, file1, file1))
#subprocess.call(rsync_cmd, shell=True)     # This isn't supposed to work but I tried it
#subprocess.Popen(rsync_cmd, shell=True)    # This is supposed to be the solution but not for me
#subprocess.Popen(rsync_cmd2, shell=True)   # Adding my own shell "&" to background it, still fails
#subprocess.Popen(rsync_cmd, shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)  # This doesn't work
#subprocess.Popen(shlex.split(rsync_cmd))   # This doesn't work
#os.execv(rsync_path, rsync_args)           # This doesn't work
#os.spawnv(os.P_NOWAIT, rsync_path, rsync_args) # This doesn't work
#os.system(rsync_cmd2)                      # This doesn't work
print "DONE"

(Hab ich auskommentiert, die Ausführung der Befehle nur, weil ich bin eigentlich halten alle meine Prüfungen in meinem code, so dass ich weiß, was ich getan habe und was ich nicht getan habe. Natürlich, ich würde führen Sie das Skript mit den richtigen Zeile auskommentiert.)

Was passiert ist diese...ich beobachten kann, die übertragung auf den server und wenn es fertig ist, bekomme ich dann "FERTIG" gedruckt auf dem Bildschirm.

Was mir geschehen ist "FERTIG" sofort gedruckt nach der Ausgabe des rsync Befehl und für die übertragung zu starten.

Scheint sehr straight-forward. Ich habe gefolgt angegebenen details in anderen Beiträgen, wie diese ein und diese, aber etwas verhindert, für mich zu arbeiten.

Dank im Voraus.

(Ich habe alles versucht ich finden kann, StackExchange und sich nicht, wie dies ist ein Duplikat, weil ich immer noch nicht bekommen kann es arbeiten. Etwas nicht stimmt in meinem setup-und Hilfe benötigen.)

Scheint um die Frage zu beantworten hier
Zeiger ist Ihre beste Wette.
eins sagt "creationflags" ist nur für Windows. Der link, den Sie geliefert, spricht über Win32 zu.
Haben Sie versucht, vereinfachen Sie Ihren code, um zu sehen, wo das problem wirklich ist? subprocess.call("sleep 10".split()) hat eine offensichtliche Verzögerung in den code in der Erwägung, dass subprocess.Popen("sleep 10".split()) geht zur nächsten Zeile sofort. Vielleicht ist Ihr problem ist irgendwo anders und schwer zu sehen? Hat Ihr code-Arbeit (in Bezug auf Timing), wenn Sie geändert haben den rsync-Aufruf einen einfachen sleep-Aufruf?
unrelated: es ist nutzlos zu erwähnen, "NICHTS für mich", es sei denn, Sie zeigen die genauen code-Beispiel, das scheitert, zu beschreiben, was hast du erwartet, es zu tun, und was passiert stattdessen Schritt für Schritt durch.

InformationsquelleAutor harperville | 2016-05-05

Schreibe einen Kommentar