如何从python中的stdout中删除\ n和\ r \ n?

时间:2017-07-20 18:03:34

标签: python python-2.7

我有这个脚本:

#!/usr/bin/python

import subprocess
import sys

HOST="cacamaca.caca"
COMMAND="display mac-address 0123-4567-8910"

ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
                       shell=False,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
    error = ssh.stderr.readlines()
    print >>sys.stderr, "ERROR: %s" % error
else:
    print result

因为输出有空格和不同的行,所以它也会打印回车符和新行,所以结果不是一个干净的行:

[' \ r \ n',' cacamaca.caca \ r \ n','信息:VTY用户的最大数量为10,数量为r \ n','当前VTY用户在线是2. \ r \ n','当前登录时间2017-07-20 20:10:54 + 03:00 DST。\ r \ n',' ----------------- -------------------------------------------------- ------------ \ r \ n',' MAC地址VLAN / VSI学习 - 来自类型\ r \ n',' ----- -------------------------------------------------- ------------------------ \ r \ n',' 0123-4567-8910 1234 / - Eth-Trunk9 dynamic \ r \ n \ n',' \ r \ n',' ---------------------------- -------------------------------------------------- - \ r \ n','显示的总项目数为1 \ n',' \ r \ n','']

如何删除' \ n'和' \ r \ n'或者至少用空格替换它们以使结果看起来像原始的那样?我确实读过很多关于此的答案,但没有人帮忙。

3 个答案:

答案 0 :(得分:2)

您的result变量是一个列表。我想你想把结果加入一个字符串并打印出来。您可以使用str.join()这样做

print ''.join(result)

这将产生以下输出

cacamaca.caca
Info: The max number of VTY users is 10, and the number
 of current VTY users on line is 2.
 The current login time is 2017-07-20 20:10:54+03:00 DST.
-------------------------------------------------------------------------------
MAC Address VLAN/VSI Learned-From Type
-------------------------------------------------------------------------------
0123-4567-8910 1234/- Eth-Trunk9 dynamic

-------------------------------------------------------------------------------
Total items displayed = 1

答案 1 :(得分:1)

您可以使用.strip()删除换行符,或.replace()替换它们,例如:

result = [x.strip() for x in result]

输出:

['', 'cacamaca.caca', 'Info: The max number of VTY users is 10, and the number', 'of current VTY users on line is 2.', 'The current login time is 2017-07-20 20:10:54+03:00 DST.', '-------------------------------------------------------------------------------', 'MAC Address VLAN/VSI Learned-From Type', '-------------------------------------------------------------------------------', '0123-4567-8910 1234/- Eth-Trunk9 dynamic', '', '-------------------------------------------------------------------------------', 'Total items displayed = 1', '', '']

答案 2 :(得分:1)

您可以使用以下代码删除“ \ n”和“ \ r \ n”。

with subprocess.Popen(["ssh", "%s" % HOST, COMMAND], shell=False) as ssh:
        result = ssh.communicate()[0]
        print(result)