我使用下面的函数逐行读取我的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
任何人都知道如何解决此错误?
答案 0 :(得分:1)
subprocess.Popen函数接收一个&#34;程序参数序列或者一个字符串&#34;作为args
参数。
args
参数中传递的内容是os.system()
调用的输出,根据documentation,&#34;进程退出状态&#34;,因此是int
个数字。而是在cmd
变量中,您应该直接传递文件/tests_run.py
的字符串(或其他迭代器)。如果您希望此路径与当前项目相关,则可以使用os.path模块。