我一直在使用os.system作为shell命令,直到发现它已被弃用。因此,我尝试切换为使用子流程。这是我的用途:
command = genConfig.MODETECT_SWITCH_COMMAND.append(state)
subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
MODETECT_SWITCH_COMMAND = [“ zmpkg.pl”]
和一些常规的ping操作:
command = genConfig.PING_COMMAND.append(host)
response = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
if "unreachable" in response or "timed out" in response:
response = False
else:
response = True
break
PING_COMMAND = [“ ping”,“ -c 1 -W 1”]
无论我在哪里做这些事情,都会出现此错误:
...tracebacks...
File "/usr/lib/python2.7/subprocess.py", line 1198, in _execute_child
args = list(args)
TypeError: 'NoneType' object is not iterable
我不知道为什么。我已经在多个地方重新检查了subprocess.popen的使用,这似乎是正确的。我可能做错了什么?谢谢。
最佳答案
你有这个:
MODETECT_SWITCH_COMMAND = ["zmpkg.pl"]
当您这样做时:
command = genConfig.MODETECT_SWITCH_COMMAND.append(state)
您正在将
command
调用的输出分配给list.append
,该调用在适当位置进行操作并返回None
。也就是说,您似乎正在分配
command = None
。subprocess
模块感到困惑,因为它期望第一个位置参数是可迭代的,而不是None
。关于python - Python —子进程popen并调用相同的错误—没有类型不可迭代?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29527325/