эм, вы цепочка os.system
вызов с subprocess.call
вызов.Это совершенно неправильно.Основная причина загадочного сообщения в том, что вы передаете код возврата os.system
, который является целым числом, когда subprocess.call
пытается выполнить итерацию по аргументу.
Переключение на subprocess
- отличная идеяпотому что os.system
устарела и подвержена проблемам безопасности.То есть, если вы подумаете об отбрасывании shell=True
.
и отбрасывании shell=True
, вам нужно будет передать список аргументов, а не составлять строку arg самостоятельно.
Мое предложение:
import os
import subprocess
ip_list = ['10.10.10.10','10.10.10.11']
snmp = ["snmpget","-v1","-c","public"] # list of arguments
outputs = []
for x in ip_list:
cp = subprocess.run(snmp + [x],check=False)
outputs.append(cp.stdout.decode())
это запускает вашу команду безопасным и простым способом, получает выходные данные и помещает каждую выходную строку в список строк (попытка назначить выходные данные также не работала сcall
или os.system
, поскольку он возвращает код выхода , а не вывод программы. Поскольку ваша команда может возвращать ненулевой код возврата, вы не можете использовать check_output
, но вы можете использоватьrun
- это то, что вам нужно (но вам нужен Python 3.5, иначе вам придется использовать решение Popen
, описанное здесь: Запуск команды оболочки и получение вывода ):
p = subprocess.Popen(snmp + [x])
result = p.communicate()[0]