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

解决方案

Python的线程将所有模具与Python。此外,使用os.system阻止。不过没关系 - 如果使用os.system()运行命令启动一个新的进程(而不是子进程),都将被罚款。在Windows中,例如,如果命令开头“开始”“开始”“d过程将保持Python的死后。

编辑:nohup是一个相当于start Linux上。 (感谢S.洛特)。

其他提示

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

我不知道是否使用subprocess.Popen会工作更好地为您。

也许做类似壳=真

线程不会工作,因为它们是过程的一部分。该system呼叫将无法工作,因为它会阻止作为新的流程执行。

您将需要使用像os.fork()以产生新的进程,并在新的进程中执行它。看看一些好的菜谱风格的解决方案这一点。

一般情况下,推出一个长期运行的服务器,它是独立于其父,你需要守护进程吧。根据您的环境中,是可以协助这一进程的各种包装。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top