在Python中运行后台进程,不要等待 [英] Run background process in Python and do NOT wait
问题描述
我的目标很简单:启动rsync并不要等待.
My goal is simple: kick off rsync and DO NOT WAIT.
Debian上的Python 2.7.9
Python 2.7.9 on 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"
(我之所以注释掉执行命令,只是因为我实际上将所有试验都保留在了我的代码中,以便我知道自己已经做过什么以及尚未完成什么.显然,我会运行该脚本右行未注释.)
(I've commented out the execution commands only because I'm actually keeping all of my trials in my code so that I know what I've done and what I haven't done. Obviously, I would run the script with the right line uncommented.)
这是怎么回事...我可以在服务器上观看传输,完成传输后,我会在屏幕上看到完成"字样.
What happens is this...I can watch the transfer on the server and when it's finished, then I get a "DONE" printed to the screen.
我想发生的是在发出rsync
命令并立即开始传输之后立即打印完成".
What I'd like to have happen is a "DONE" printed immediately after issuing the rsync
command and for the transfer to start.
看起来很简单.我关注了其他帖子中概述的详细信息,例如此一个和这一个,但是有一些阻止它正常工作对我来说.
Seems very straight-forward. I've followed details outlined in other posts, like this one and this one, but something is preventing it from working for me.
提前谢谢.
(我已经尝试了我在StackExchange中可以找到的所有内容,但由于我仍然无法使其正常工作,我不觉得这是重复的.我的设置不正确,需要帮助.)
(I have tried everything I can find in StackExchange and don't feel like this is a duplicate because I still can't get it to work. Something isn't right in my setup and need help.)
推荐答案
以下是经过验证的Python REPL示例:
Here is verified example for Python REPL:
>>> import subprocess
>>> import sys
>>> p = subprocess.Popen([sys.executable, '-c', 'import time; time.sleep(100)'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT); print('finished')
finished
如何通过另一个终端窗口进行验证:
How to verify that via another terminal window:
$ ps aux | grep python
输出:
user 32820 0.0 0.0 2447684 3972 s003 S+ 10:11PM 0:00.01 /Users/user/venv/bin/python -c import time; time.sleep(100)
这篇关于在Python中运行后台进程,不要等待的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!