У меня есть программа на Python (ниже), и когда я запускаю его я получаю следующее сообщение об ошибке:Ошибка от stderr - как его исправить?
% python SSH_Prog.py
About to connect...
stderr: ["bash: -c: line 0: unexpected EOF while looking for matching `''\n", 'bash: -c: line 1: syntax error: unexpected end of file\n']
pwd: []
stderr: ['watch: no process found\n']
pwd: []
^CTraceback (most recent call last):
File "SSH_Prog.py", line 32, in <module>
time.sleep(3)
KeyboardInterrupt
Я думаю, что это связано с последовательностью побега, вероятно, и «\ п» символ из стандартного ввода, но Мне не хватает опыта, чтобы справиться с этим.
Вот программа:
import os
import sys
import time
import paramiko
#from ssh import SSHClient
# Define remote machine
host="<ip>"
user="<usrnm>"
passw="<passw>"
client = paramiko.SSHClient()
#client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# Try SSH connection, catch exception
#if not
print('About to connect...')
client.connect(host, username=user, password=passw)
# ForLoop to iterate through the interactions
for x in range(10):
xx = str(x)
# Commands to execute on local machine
f = os.popen3('tshark -i eth0 -f snmp -F pcapng -w ~/Desktop/traf_logs/n'+(xx))
# commands to execute on remote machine
stdin, stdout, stderr = client.exec_command("watch -n 0.1 'ps -p $(pgrep -d"," -x snmpd) -o rss= | awk '\''{ i += $1 } END { print i }'\'' >> ~/Desktop/mem_logs/mem_"+(xx)+";")
print "stderr: ", stderr.readlines()
print "pwd: ", stdout.readlines()
g = os.popen3('snmpget -v 2c -c communitystring <ip> sysContact.0')
time.sleep(3)
stdin, stdout, stderr = client.exec_command('killall watch;')
print "stderr: ", stderr.readlines()
print "pwd: ", stdout.readlines()
ff = os.popen3('killall tshark')
# terminate connection
client.close()
exit(0)
У вас есть какие-либо идеи, чтобы исправить это?
С уважением.
Вместо использования 'os.popen' и семьи, проверьте' subprocess.Popen'. Рекомендуется использовать эти дни. Это просто общий комментарий, не обязательно решение вашей проблемы. – mgilson
Это связано с тем, почему 'watch' внутри' exec_command' не может найти нужный процесс. Сначала запустите его в частях и проверьте, является ли результат тем, чем он должен быть. –
Можете ли вы объяснить, что вы на самом деле пытаетесь сделать, дать пример того, что вы ожидаете от командной строки, которая появляется на другом конце соединения 'ssh', чтобы выглядеть и т. Д.? – abarnert