Python子进程命令行错误

时间:2017-04-25 20:10:34

标签: python time command-line

我很困惑。所以我正在尝试使用我的程序program10.py,该程序使用其他程序,例如other_program

所以我可能会这样运行:

python3 program10.py other_program

other_program接受一个int参数 这是我的program10.py代码:

import time
import subprocess
n = 2**10
myList = []
while n <= 2**15:
    before = time.process_time()
    subprocess.call(n)
    after = time.process_time()
    print(n, after-before)
    myList.append(after-before)
    n *= 2

print(myList)

当然,我遇到了这个大错误:

Traceback (most recent call last):
  File "program10.py", line 7, in <module>
    subprocess.call(n)
  File "/usr/lib/python3.5/subprocess.py", line 557, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.5/subprocess.py", line 1440, in _execute_child
    args = list(args)
TypeError: 'int' object is not iterable

我毫不怀疑我使用subprocess.call完全错误,因为我不理解它,其他SO问题或Python文档都没有帮助我。如果有人能告诉我它与我的程序有什么关系,那就意味着很多。

2 个答案:

答案 0 :(得分:1)

“TypeError:'int'对象不可迭代”这一行告诉你函数需要一个可迭代的,而不是一个整数。尝试传递字符串或字符串列表。

答案 1 :(得分:1)

您应该在subprocess.call()中提供您尝试运行的程序的名称。该错误表示int不可迭代。 Iterables是字符串,列表或元组之类的对象。它们是“包含”多个项目的对象,并且可以一次返回一个项目。 subprocess.call()通常需要一个包含命令的列表以及您要运行的任何参数。例如:

subprocess.call(['other_program', str(n)])

但这只会返回程序的返回码。如果您需要程序创建的任何输出,则需要使用其他函数,如subprocess.check_output()