我一直在使用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/

10-11 22:54
查看更多