【发布时间】:2021-01-02 02:45:30
【问题描述】:
我有一个main.py 使用subprocess.Popen 执行file.py:
# Execute request
url = "http://something:50001/dosomething/run"
test = ["python", "file.py", "url", url]
writer = subprocess.Popen(test, shell=False)
File.py 在请求 url 时执行一个获取“退出代码”的函数:
exitCode = None
answer = requests.get(url)
janswer = answer.json()
exitCode = janswer.get("exitCode")
return exitCode
出于某种原因,我需要使用subprocess.Popen 执行此file.py,以便main.py 中的一些代码在file.py 执行其工作时执行。
我现在要做的是将exitCode从file.py恢复到main.py。
我尝试使用stdout=subprocess.Pipe 并通过打印恢复退出代码,但由于某种原因它不起作用。
获取writer.returncode 不是解决方案,因为它会给我来自子进程的代码,而不是来自函数的代码
函数返回exitCode = -2,子进程返回returncode = 0,我需要那个-2。 (-2 只是一个例子,exitCode 并不总是相同,取决于一些参数。)
【问题讨论】:
-
是否可以选择使用
sys.exit()终止子进程?这允许您指定子进程的退出代码,然后将反映在writer.returncode中。请注意,您可以使用sys.exit()返回的值范围是有限的,但可能只使用几个小值就足够了。 -
这可能对其他东西有用,但不是现在。我从 url 执行中得到一个代码,该代码是动态的 @DanielJunglas 不,但感谢您帮助 buran
-
您能否更明确地说为什么使用
stdout = PIPE不起作用?它对我来说很好。 -
stdout = PIPE,由于某种不明原因,给我发回url,而不是exitCode,没有print(url),只有print(exitCode)和return exitCode跨度> -
我认为你没有得到返回值的原因是因为当你尝试获取返回值时子程序还没有结束。我建议在这里使用 asyc await 概念
标签: python subprocess