gpt4 book ai didi

python - 使用多个命令运行子进程并分离到后台保持顺序

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:29 25 4
gpt4 key购买 nike

我正在使用 subprocess 模块来执行两个命令:

import shlex    
from subprocess import check_call()

def comm_1(error_file):
comm = shlex("mkdir /tmp/kde")
try:
check_call(comm)
except subprocess.CalledProcessError:
error_file.write("Error comm_1")

def comm_2(error_file):
comm = shlex("ls -la /tmp/kde")
try:
check_call(comm)
except subprocess.CalledProcessError:
error_file.write("Error comm_2")

if __name__ == "__main__":
with open("error_file", "r+") as log_error_file:
comm_1(log_error_file)
comm_2(log_error_file)
log_error_file.write("Success")

我知道这个设计中的一些缺陷,比如 error_file 与函数共享。不过,这很容易重构。我想要做的是将整个过程分离到后台。我会用

 check_call(comm, creationflags=subprocess.CREATE_NEW_CONSOLE)

但这会造成竞争问题,因为我想确保 comm_1comm_2 开始之前完成。使用 subprocess 执行此操作的最佳方法是什么?我不能使用 python-daemon 或标准 Python 2.6 库之外的其他包。

编辑:我可以尝试使用类似的东西

nohup python myscript.py &

但想法是只有一种方法可以从 python 脚本启 Action 业。

最佳答案

您可以使用 wait() 检查以确保 comm_1 中的进程在 comm_2 中启动子进程调用之前结束。 .但是要这样做,您将不得不使用 Popen()而不是 check_call()

from subprocess import Popen

def comm_1(error_file):
comm = shlex("mkdir /tmp/kde")
try:
proc_1 = Popen(comm)
proc_1.wait(timeout=20)
except subprocess.CalledProcessError, TimeoutExpired:
error_file.write("Error comm_1")

proc_1.wait() 将等待 20 秒(您可以更改时间)让进程完成,然后再继续。如果花费的时间超过 20 秒,它将抛出一个 TimeoutExpired 异常,您可以在 except block 中捕获该异常。

关于python - 使用多个命令运行子进程并分离到后台保持顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38834243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com