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

时间:2012-10-06 11:53:45

标签: 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完美配合。

1 个答案:

答案 0 :(得分:4)

这样的事情应该有效

#!/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"