gpt4 book ai didi

子进程中模块的Python调用函数

转载 作者:行者123 更新时间:2023-12-01 13:51:09 25 4
gpt4 key购买 nike

我想检索从主程序调用的模块函数的标准输出、标准错误和结果代码。我认为子进程是关键,但我没有成功将模块函数提交给子进程。

是)我有的:

#my_module.py
def run(args):
do stuff
print this
return THAT
if name == "__main__":
args = read_args()
run(args)

.
#my_main_script.py
import subprocess as sp
import my_module
p = sp.Popen(my_module.run(args), stdout=sp.PIPE, stderr=sp.PIPE)
out, err = p.communicate()
result = p.resultcode

会发生什么:
显然,子进程模块对 my_module.run() 返回的 THAT 做了一些事情,从而引发了崩溃:

如果 THAT = list_of_lists错误: AttributeError: "sublist" object has no attribute rfind
如果 THAT = ["a","b",0]错误: TypeError: execv() arg 2 must contain only strings如果 THAT = ["a","b"]错误: OSError: [Errno 2] No such file or directory
所以子进程显然希望那是一个包含文件路径的列表???

最佳答案

您没有以正确的方式使用子流程:

sp.Popen(["./my_module.py", "arg1", "arg2"], stdout=sp.PIPE, stderr=sp.PIPE)

顺便说一句,如果您没有使用 sys.exit(retcode) 正确退出程序,您将不会得到任何结果代码。功能。

最终脚本如下所示:
#my_module.py
def run(args):
do stuff
print this
return THAT

if name == "__main__":
import sys
args = read_args()
sys.exit(run(args))

#my_main_script.py
import subprocess as sp

p = sp.Popen(["./my_module.py", "arg1", "arg2"], stdout=sp.PIPE, stderr=sp.PIPE)
out, err = p.communicate()
result = p.returncode

关于子进程中模块的Python调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31513350/

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