0

paramiko を使用して、コンピューティングで使用されているすべての TCP ポートを一覧表示しようとしています。ここで良いbashコマンドを見つけました:

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

このコマンドは、パテに直接入力すると完全に機能します。ただし、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 に答える