【问题标题】:Using subprocess to start multiple programs使用子进程启动多个程序
【发布时间】:2019-07-12 23:06:16
【问题描述】:

我正在尝试使用 Python 脚本来启动多个程序。我面临的问题是,虽然这些程序中的第一个程序在 shell 中按预期执行,但第二个程序永远不会执行。有没有办法启动第一个程序并且没有让子进程等待启动第二个程序?

我尝试使用 subprocess 模块中的 call 函数,让主程序等待 5 秒,然后启动第二个。

import subprocess

subprocess.call(['xxx', 'xxxxxx', 'xxxxxxxx', 'shell=True'])
time.sleep(5)
subprocess.call(['xxx', '-x', 'xxxxxx'])

我希望程序在 shell 中启动这些程序中的每一个,但只启动第一个程序。

【问题讨论】:

    标签: python-3.x subprocess


    【解决方案1】:

    直接使用subprocess 模块中的Popen constructor 以在后台启动进程。

    因为它有效地启动一个进程,但不等待它完成,我喜欢在代码中将它重命名为start。像这样:

    from subprocess import Popen as start
    process = start('python process.py')
    

    与您的示例一样,您可以只给流程或每个流程足够的时间来完成。但是,在退出调用脚本之前,最好等待它们分别完成:

    from subprocess import Popen as start
    
    processes = []
    
    for i in range(3):
        process = start(f'python process{i}.py')
        processes.append(process)
    
    for process in processes:
        process.wait()
    

    请参阅documentation of the subprocess 模块以确定是否确实需要添加选项shell=True 来运行您的外部进程。

    【讨论】:

    • 我尝试了您的第一个解决方案,它在一定程度上奏效了。该代码确实启动了两个程序,但是,它试图在与第一个程序相同的术语窗口中打开第二个程序。发生这种情况时,第二个程序出错,但第一个程序继续。有没有办法启动 3 个单独的 shell?
    • 好的。也许我应该说这是在 Linux 系统上。另外,我试图让每个都在单独的窗口中执行。这些是长时间运行的程序,它们应该一直运行到明确停止。感谢您的输入!!至少现在我比以前更进了一步!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2016-02-28
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2013-05-16
    • 2017-03-07
    相关资源
    最近更新 更多