当前位置: 首页 > 面试题库 >

在Python中运行后台进程,不要等待

文华美
2023-03-14
问题内容

我的目标很简单:启动rsync并不要等待。

Debian上的Python 2.7.9

样例代码:

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"

(我之所以注释掉执行命令,只是因为我实际上将所有试验都保留在代码中,以便我知道自己已经做过什么以及尚未完成什么。显然,我会以正确的方式运行脚本行未注释。)

这是怎么回事…我可以在服务器上观看传输,完成传输后,我会在屏幕上看到“完成”字样。

我想发生的是在发出rsync命令并立即开始传输后立即打印“完成” 。

提前谢谢。

(我已经尝试了在StackExchange中可以找到的所有内容,但由于我仍然无法使它正常工作,所以我觉得这不是重复的。某些设置不正确,需要帮助。)


问题答案:

这是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

如何通过另一个终端窗口进行验证:

$ 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)


 类似资料:
  • 问题内容: 我想使用ffmpeg在php中将视频转换为.flv。目前,我正在执行此操作,但是它会挂起浏览器,直到文件上传完毕。我一直在寻找有关如何在后台运行exec()进程的php文档,同时使用返回的PID更新进程。这是我发现的: 我还使用一个技巧来跟踪后台任务是否正在使用返回的PID运行: 我是否想创建一个单独的.php文件,然后从php cli运行以执行以下功能之一?我只需要稍微推动一下即可开

  • 问题内容: 我一直在尝试编写从串行端口读取数据的python脚本。它在命令行上运行良好,但是我需要它作为后台进程运行而没有任何命令行界面。该脚本有一个while循环,该循环从串行端口读取下一个数据字节,并相应地模拟按键。为了使按键可以专注于当前窗口而不是python命令行,我需要脚本作为后台进程运行。我在这里读的答案很少,但是没有什么让我振奋。请指出正确的方向。 问题答案: 在Windows上,您

  • 问题内容: 我已经下载了redis-2.6.16.tar.gz文件,安装成功。安装后,我运行src / redis-server可以正常工作。 但是我不想每次都手动运行src / redis-server,而是希望redis-server作为后台进程连续运行。 到目前为止,安装后我做了以下任务: 1. vim redis.conf,我改为 但是我发现了相同的结果。我犯了什么错误? redis之后在

  • 我有一个简单的java程序,它只是一段代码,可以从数据库中读取并根据某些条件修改数据库的内容。现在,我想要的是这个程序应该在启动时自动启动并在后台静默运行,除非有人从任务管理器中杀死它。我以前从未做过这样的事情,也不知道具体该怎么做。有人能帮我解决这个问题吗?谢谢你...

  • 问题内容: 我正在尝试将Shell脚本移植到可读性更高的python版本。原始的shell脚本在后台使用“&”启动多个进程(实用程序,监视器等)。如何在python中达到相同的效果?我希望这些过程在Python脚本完成后不会消失。我敢肯定它与守护程序的概念有关,但是我找不到如何轻松实现此目的。 问题答案: 注意:此答案的最新版本比2009年发布时要少。现在建议在文档中使用其他答案中显示的模块 (请

  • 问题内容: 有什么方法可以让我的Python脚本(带有无限的“ while”循环)在OS X的后台运行?另外,出于相同的目的,是否可以在USB驱动器上使用“自动运行”的python脚本? 问题答案: 如果要让脚本作为自动启动的守护进程运行,则可以使用launchctl和plist文件。 例如,Bob有一个简单的python脚本,该脚本每秒在其主目录中将单词’foo’写入文件: 要使其作为守护进程运