python - 在后台运行的单个调用中一个接一个地运行 subprocess

为了在后台运行 subprocess 而不会干扰主代码的连续性,我这样调用 Python 文件:

Popen(['secondary.py'], shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)

有什么方法可以使用此调用来运行第一个文件('secondary.py'),然后在完成该过程时运行另一个文件('tertiary.py')?

例如:

Popen(['secondary.py','tertiary.py'], shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)

笔记:

我不能这样称呼一个低于另一个:

Popen(['secondary.py'], shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)
Popen(['tertiary.py'], shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)

因为它们会变成两个独立的 subprocesses,这不是我的预期目标,所以我需要完成一个然后运行另一个。

回答1

subprocess.run 等待命令完成。您可以创建一个后台线程来连续运行您想要的所有命令。

import threading
import subprocess

def run_background():
    subprocess.run(['secondary.py'], shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)
    subprocess.run(['tertiary.py'], shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)

bg_thread = threading.Thread(target=run_background)
bg_thread.start()

因为这没有被标记为守护线程,所以主线程将等到该线程完成并退出程序。

相似文章