python : os.spawn 。无法在后台启动 bash 进程

标签 python bash

任务是从 python 脚本执行 bash 脚本并让它在后台执行,即使 python 脚本将完成。我需要 UNIX 解决方案,我不关心它是否不能在 Win 上运行。

Python 脚本:

#!/usr/bin/env python
import os, commands
command = '/usr/bin/ssh localhost "/home/gd/test/python/back.sh  "   '
print os.spawnlp(os.P_NOWAIT,command)
print "Python done"

/home/gd/test/python/back.sh :

#!/usr/bin/bash

/bin/echo "started"
/bin/sleep 80
/bin/echo "ended"

问题是,当 python 脚本启动时,我看到打印了派生进程的 PID。但是后台没有进程。当我使用 P_WAIT 时,我看到退出代码 127,这意味着在路径中找不到该命令。但是我已经提供了所有可能的路径? 这些脚本与 commands.getouput 完美配合。

最佳答案

像这样的东西应该可以工作

#!/usr/bin/env python
import os
command = ['/usr/bin/ssh', 'ssh', 'localhost', '/home/gd/test/python/back.sh']
print os.spawnlp(os.P_NOWAIT, *command)
print "Python done"

请注意,最好使用 subprocess模块在这里而不是 spawn

#!/usr/bin/env python
from subprocess import Popen
command = ['/usr/bin/ssh', 'localhost', '/home/gd/test/python/back.sh']
print Popen(command)
print "Python done"

关于 python : os.spawn 。无法在后台启动 bash 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12759551/

相关文章:

python - 将参数传递给 Pytest py.test 。所有测试的全局参数

python - 如何检查 2D 图表中所有点的距离并确保没有点太近?

java - 编译多个java文件的Ubuntu脚本?

python - 使用 python 创建 bash 文件

bash - sed 到 grep 两个模式之间的字符串

bash - 如何更改 md5sum 命令输出的分隔符

python - 两个 Pandas 数据帧之间的多个条件总和

python - Google Wave Python 教程 - 没有任何反应

python - 为 Python 安装简单音频时出现 “ERROR: Command errored out with exit status 1: python.”

linux - 具有 shell 扩展的 Systemd 单元配置