在python脚本结束后,从python调用的shell脚本是否仍然存在?

时间:2010-02-10 21:30:52

标签: python automation jython sh

作为自动化测试的一部分,我有一个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,)
    )

5 个答案:

答案 0 :(得分:2)

Python线程都会死于Python。此外,os.system正在阻止。但是没关系 - 如果os.system()运行的命令启动一个新进程(但不是子进程),一切都会好的。例如,在Windows上,如果命令以“start”开头,那么在Python死后,“start”'d进程将保持不变。

编辑:nohup相当于Linux上的start。 (感谢S. Lott)。

答案 1 :(得分:1)

os.system()在它启动的进程结束之前不会返回。如果您需要在单独的流程中使用subprocessRuntime.exec()

答案 2 :(得分:0)

我想知道是否使用subprocess.Popen会更适合你。

可能会做类似shell = True

的事情

答案 3 :(得分:0)

线程不起作用,因为它们是进程的一部分。 system调用无效,因为它会在新进程执行时阻塞。

您需要使用os.fork()之类的东西来生成新流程并在新流程中执行它。请查看subprocess以获得一些很好的食谱风格解决方案。

答案 4 :(得分:0)

通常,要启动一个独立于其父级的长时间运行的服务器,您需要对其进行守护。根据您的环境,有各种包装可以帮助完成此过程。