4

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

5 回答 5

2

Python 线程都将随着 Python 而死。此外, os.system 正在阻塞。但这没关系——如果 os.system() 运行的命令启动一个新进程(但不是子进程),一切都会好起来的。例如,在 Windows 上,如果命令以“start”开头,则“start”进程将在 Python 死后保留。

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

于 2010-02-10T21:35:56.940 回答
1

os.system()在它启动的进程结束之前不会返回。使用subprocess或者Runtime.exec()如果你想在一个单独的过程中使用它。

于 2010-02-10T21:34:31.390 回答
0

我想知道使用 subprocess.Popen 是否对您更有效。

也许做类似 shell=True 的事情

于 2010-02-10T21:35:20.363 回答
0

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

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

于 2010-02-10T21:38:44.110 回答
0

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

于 2010-02-10T21:39:23.447 回答