【发布时间】:2020-10-12 17:47:44
【问题描述】:
我有一个python脚本af_audit_run.py,它通过subprocess调用另一个python脚本request_audit.py。
第二个脚本request_audit.py在后台调用另一个子进程并返回一个请求ID。
问题是第一个脚本af_audit_run.py,应该在第二个脚本返回请求ID后很快退出,正在等待整个后台进程完成。有什么方法可以强制第一个脚本在请求 id 返回后立即退出?
af_audit_run.py -- 使用communicate 方法等待结果:
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
result, error = p.communicate()
print(result.decode('utf-8'))
print(error.decode('utf-8'))
request_audit.py -- 不等待,只是分离一个子进程(第三个 python 脚本)并返回请求 ID:
subprocess.Popen(cmd, shell=True, stdout=None, stderr=None, close_fds=True)
print(request_id)
环境:Linux
【问题讨论】:
-
请您显示现有代码的相关部分。
-
@alaniwi,我已经更新了代码 sn-p。
-
如果你使用
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL而不是stdout=None, stderr=None,它就可以工作。 (我会在答案中提供更多细节。) -
@alaniwi,这将重定向输出,但无助于第一个脚本在获取返回码后立即出现。我希望第一个脚本不要等待第二个脚本后台进程完成。
-
你试过了吗?
标签: python subprocess