2

任务是从 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 完美配合。

4

1 回答 1

5

像这样的东西应该工作

#!/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"
于 2012-10-06T12:52:15.340 回答