Моя цель проста: отпустите rsync и НЕ ЖДИТЕ.Запустите фоновый процесс в Python и не ждите
Python 2.7.9 на Debian
Пример кода:
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"
(я закомментирована выполнение команды только потому, что я на самом деле держать все мои испытания в моем коде, так что я знаю, что я сделал, и что я еще не сделал. Очевидно, я запустил скрипт с правильной линией без комментариев.)
Что происходит, это ... Я могу посмотреть передачу на сервере, закончен, тогда я получаю «DONE», напечатанный на экране.
То, что я хотел бы иметь, это «СОВЕРШЕННО», напечатанное сразу же после выпуска команды rsync
и для начала передачи.
Кажется, очень прямолинейно. Я пробовал ВСЕ предложения, предлагаемые Interwebs, и я нашел НИЧЕГО, что работает для меня.
Спасибо заранее.
(Я уверен, что все будут предлагать «Это дубликат», но каждая запись, которую я обнаружил во всем сообществе StackExchange, терпит неудачу. Если у вас есть тот, который вы хотите, чтобы я попытался передать его . вместе, прежде чем вы думаете, что это дубликат)
Похоже, на вопрос отвечает [здесь] (http://stackoverflow.com/a/2251026/3070670) –
Указатель bych - ваш лучший выбор. – WreckeR
[This one] (http://stackoverflow.com/questions/3516007/run-process-and-dont-wait#comment19551411_6700359) говорит, что «creationflags» - только для Windows. Вы также указали ссылку на Win32. – harperville