0

我尝试使用 paramiko 列出计算上使用的所有 TCP 端口。我在这里找到了一个很好的 bash 命令:

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

当我直接在 putty 中输入它时,这个命令可以完美运行。但是,当它与 paramiko 一起使用时,不会显示任何输出。

这是示例代码:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username='demo', password='password')
command = "netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq"
stdin, stdout, stderr = ssh.exec_command(command)
print stdout.read()

如果我按以下方式更改命令,标准输出会显示结果,但这不是我想要的。所以我想这可能是 paramiko 的正则表达式问题。任何的想法?

command = "netstat -ant | sed -e '/^tcp/ !d'"
4

1 回答 1

1

'\1'与 相同'\x01'。你应该逃跑\1

>>> '\1'
'\x01'
>>> print '\1'

>>> '\\1'
'\\1'
>>> print '\\1'
\1
>>> r'\1'
'\\1'
>>> print r'\1'
\1

使用 raw string( r'...') 解决你的问题:

command = r"netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq"
于 2013-07-27T03:52:32.093 回答