作为自动化测试的一部分,我有一个python脚本,需要调用两个shell脚本,启动两个不同的服务器,需要在调用脚本结束后进行交互。 (它实际上是一个jython脚本,但我不确定这一点是否重要。)在python脚本结束后,我能做些什么来确保服务器保持正常运行?
此时他们被称为这样的事情:
def runcmd(str, sleep):
debug('Inside runcmd, executing: ' + str)
os.chdir("/new/dir/")
directory = os.getcwd()
print 'current dir: '+ directory
os.system(str)
t = threading.Thread(
target=runcmd,
args=( cmd, 50,)
)
答案 0 :(得分:2)
Python线程都会死于Python。此外,os.system正在阻止。但是没关系 - 如果os.system()运行的命令启动一个新进程(但不是子进程),一切都会好的。例如,在Windows上,如果命令以“start”开头,那么在Python死后,“start”'d进程将保持不变。
编辑:nohup
相当于Linux上的start
。 (感谢S. Lott)。
答案 1 :(得分:1)
os.system()
在它启动的进程结束之前不会返回。如果您需要在单独的流程中使用subprocess
或Runtime.exec()
。
答案 2 :(得分:0)
我想知道是否使用subprocess.Popen会更适合你。
可能会做类似shell = True
的事情答案 3 :(得分:0)
线程不起作用,因为它们是进程的一部分。 system
调用无效,因为它会在新进程执行时阻塞。
您需要使用os.fork()
之类的东西来生成新流程并在新流程中执行它。请查看subprocess以获得一些很好的食谱风格解决方案。
答案 4 :(得分:0)
通常,要启动一个独立于其父级的长时间运行的服务器,您需要对其进行守护。根据您的环境,有各种包装可以帮助完成此过程。