我正在尝试使用以下代码中的列表中的一些itens做一些有用的事情:
IPS=['10.254.243.83','10.254.243.82']
def commands(cmd):
command = Popen(cmd, shell=True, stdout=PIPE)
command_strip = command.stdout.read().strip()
print command_strip
def main():
for ip in IPS:
ping = call('ping -c 3 %s' % ip, shell=True)
commands(ping)
if __name__ == "__main__":
main()
然后,它返回给我: python teste.py
PING 10.254.243.83 (10.254.243.83) 56(84) bytes of data.
64 bytes from 10.254.243.83: icmp_seq=1 ttl=61 time=2.72 ms
64 bytes from 10.254.243.83: icmp_seq=2 ttl=61 time=2.05 ms
64 bytes from 10.254.243.83: icmp_seq=3 ttl=61 time=1.88 ms
--- 10.254.243.83 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.885/2.224/2.728/0.363 ms
Traceback (most recent call last):
File "teste.py", line 15, in ?
main()
File "teste.py", line 12, in main
commands(ping)
File "teste.py", line 5, in commands
command = Popen(cmd, shell=True, stdout=PIPE)
File "/usr/lib/python2.4/subprocess.py", line 543, in __init__
errread, errwrite)
File "/usr/lib/python2.4/subprocess.py", line 891, in _execute_child
args = ["/bin/sh", "-c"] + args
TypeError: can only concatenate list (not "int") to list
Can someone help me with this error ?
答案 0 :(得分:4)
您传递
的返回值call('ping -c 3 %s' % ip, shell=True)
作为cmd
函数的commands()
参数。提到的返回值是一个整数,它作为命令没有任何意义,因此尝试使用Popen()
执行此整数会失败。
答案 1 :(得分:3)
您是否尝试过更换
ping = call('ping -c 3 %s' % ip, shell=True)
与
ping = 'ping -c 3 %s' % ip