Python3.5子进程错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3.5子进程错误相关的知识,希望对你有一定的参考价值。

我使用下面的函数逐行读取我的python脚本输出并保存并行。但最终得到Traceback错误。

码:

def myrun(cmd):
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout = []
    while True:
        line = p.stdout.readline()
        stdout.append(line)
        print (line),
        if line == '' and p.poll() != None:
            break
    return ''.join(stdout)

当呼叫功能为:

myrun(os.system("./tests_run.py"))

我得到以下错误:

错误:

Traceback (most recent call last):
  File "./Portability_Tests.py", line 38, in <module>
    myrun(os.system("./tests_run.py"))
  File "./Tests.py", line 11, in myrun
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  File "/usr/local/lib/python3.5/subprocess.py", line 676, in __init__
    restore_signals, start_new_session)
  File "/usr/local/lib/python3.5/subprocess.py", line 1171, in _execute_child
    args = list(args)
TypeError: 'int' object is not iterable

任何人都知道如何解决此错误?

答案

subprocess.Popen函数接收“程序参数序列或单个字符串”作为其args参数。

你在args论证中传递的是os.system()调用的输出,根据documentation,它是“过程的退出状态”,因此是int数。而不是在cmd变量中,您应该直接传递文件/tests_run.py的字符串(或其他迭代器)。如果您希望此路径相对于当前项目,则可以使用os.path模块。

以上是关于Python3.5子进程错误的主要内容,如果未能解决你的问题,请参考以下文章

无法弄清楚如何在 Python 3.5 中杀死子进程 [重复]

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

Python 子进程返回错误的退出代码

错误运行子进程cordova时发生错误

节点 Kue 和子进程 - 从生成的进程中获取错误

使用 asyncio 将 bash 作为 Python 的子进程运行,但 bash 提示被延迟