В Python3 с использованием subprocess.Popen, я хотел бы захватить выходные данные и код возврата команды для этой команды "n c -z 192.168.25.14 22". Вот мой пример кода:
#!/usr/bin/env python
import urllib.request, urllib.error, urllib.parse
import subprocess
import time
# set up null file for pipe messages
nul_f = open('/dev/null', 'w')
# try loop for clean breakout with cntl-C
try:
with open('/mnt/usbdrive/output/Urls.txt') as f:
for line in f:
data = line.split()
commands = ['nc', '-vZ', data[1], data[0]]
print(commands)
try:
ncdmp = subprocess.Popen(commands , stderr=subprocess.PIPE, stdout=subprocess.PIPE,)
except OSError:
print ("error: popen")
exit(-1) # if the subprocess call failed, there's not much point in continuing
ncdmp.wait()
if ncdmp.returncode != 0:
print(" os.wait:exit status != 0\n")
else:
print ("os.wait:", ncdmp.pid, ncdmp.returncode)
print("STDERR is ", ncdmp.stderr)
print("STDOUT is ", ncdmp.stdout)
print("STDIN is ", ncdmp.stdin)
except KeyboardInterrupt:
print('Done', i)
# clean up pipe stuff
ncdmp.terminate()
ncdmp.kill()
nul_f.close()
и пример вывода:
* Команды: ['n c', '-vZ', '192.168.25.14', '22']
os.wait: состояние выхода! = 0
STDERR равно <_io.BufferedReader name = 12>
STDOUT равно <_io.BufferedReader name = 9 >
STDIN - это <_io.BufferedWriter name = 8> *
Я предполагаю, что в моем коде или логике есть ошибка c, но я не могу ее выяснить. Я использовал подобный код для других команд, таких как s sh и ls без проблем. Для этой команды "n c" я получаю один и тот же набор выводов / сообщений независимо от того, существует ли открытый адрес 22 по адресу хоста.
Спасибо ... RDK