我正在尝试使用我的代码解决问题,我正在执行我的函数play()
,但我传递的--b
参数是int
,我做错了什么?
import argparse
from num2words import num2words
import subprocess
def play():
parser = argparse.ArgumentParser()
parser.add_argument("--b", default='99',type=str,help="B?")
args = parser.parse_args()
for iteration in reversed(range(args.b)):
print('Wee!')
play()
if __name__ == '__main__':
subprocess.call(['./file.py', '10'], shell=True)
我通过以下方式执行此操作:
>>> import sys; import subprocess;
>>> subprocess.call([sys.executable, 'file.py', '--b', 10])
Traceback (most recent call last):
File "<string>", line 1, in <module>
File ".\subprocess.py", line 480, in call
File ".\subprocess.py", line 633, in __init__
File ".\subprocess.py", line 801, in _execute_child
File ".\subprocess.py", line 541, in list2cmdline
TypeError: argument of type 'int' is not iterable
答案 0 :(得分:6)
subprocess.call([sys.executable, 'file.py', '--b', 10])
参数列表中subprocess.call
(或模块的其他函数)的所有参数都需要是字符串。因此,如果您将10
更改为字符串'10'
,则可以正常使用:
subprocess.call([sys.executable, 'file.py', '--b', '10'])
请注意,当被调用文件无法执行时,使用subprocess
调用Python文件不会给您任何异常。这是一个完全独立的过程 - 如果它失败 - 只是产生一些错误输出,你可以从子进程读取。