Python 解析paramiko的输出

Python 解析paramiko的输出,python,paramiko,Python,Paramiko,我正在使用paramiko todo远程SSH ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname, username='root', key_filename='/root/.ssh/mykey.priv') stdin, stdout, stderr = ssh.exec_command('firewall-cmd --state')

我正在使用paramiko todo远程SSH

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, username='root', key_filename='/root/.ssh/mykey.priv')
stdin, stdout, stderr = ssh.exec_command('firewall-cmd --state')
print stdout.readlines()
我得到的输出是

[u'running\n']

如何将其解析为仅作为“正在运行”打印?

我现在正在尝试使用paramiko并使用recv,根据这里的文档,它将重新运行一个字节。所以我所做的就是把它转换成字符串,参见下面的内容

myconn = paramiko.SSHClient()
myconn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
myconn.connect('192.168.15.254', port=22, username='test',
                password='test', look_for_keys=False,
                allow_agent=False)
myshell = myconn.invoke_shell()
myshell.send('show int ATM 0/0/0 | include put rate \n')
time.sleep(1)
output = myshell.recv(65535)
myconn.close()
print(output)
mystr = output.decode(encoding='UTF-8')
print(mystr)
打印输出会给你这个

b'\r\nROUTER#show int ATM 0/0/0 | include put rate \r\n  30 second   input rate 47000 bits/sec, 37 packets/sec\r\n  30 second output rate 38000 bits/sec, 33 packets/sec\r\nROUTER#'
ROUTER#show int ATM 0/0/0 | include put rate 
  30 second input rate 18000 bits/sec, 16 packets/sec
  30 second output rate 15000 bits/sec, 13 packets/sec
ROUTER#
Print mystr会给你这个

b'\r\nROUTER#show int ATM 0/0/0 | include put rate \r\n  30 second   input rate 47000 bits/sec, 37 packets/sec\r\n  30 second output rate 38000 bits/sec, 33 packets/sec\r\nROUTER#'
ROUTER#show int ATM 0/0/0 | include put rate 
  30 second input rate 18000 bits/sec, 16 packets/sec
  30 second output rate 15000 bits/sec, 13 packets/sec
ROUTER#
我希望这至少能让你走上正确的道路,如果不是太晚的话。

试试下面的代码:

print(stdout.read().decode('ascii'))

我相信这会解决你的问题。

至少它解决了别人两年后偶然发现的问题。