6

paramikoでパイプコマンドを実行するにはどうすればよいですか? 私はこれをやっています:

statement = 'grep thing file | grep thing2 | tail -1'
last_msg = conn.execute(statement)

のみの出力が得られますgrep thing file

4

1 に答える 1

9

grep扱いがわからないからです|。いくつかの厄介なエスケープの準備をしてください:

statement = """sh -c 'grep thing file | grep thing2 | tail -1'"""

これにより、反対側にシェルが作成され、文字列を解釈するように要求されますgrep thing file | grep thing2 | tail -1sh -c単一の引数のみを受け入れるため、一重引用符が必要です。

そうすれば、シェルがパイプを作成し、すべてのコマンドを実行します。fileまた、ファイル名にスペースが含まれていないことを確認してください。その場合は、 を試してください"file"

ご覧のとおり、これはすぐに非常に醜くなります。パイプラインをシェルスクリプトに入れることをお勧めします。次に、引用符を避けて、スクリプトを実行するだけsh -c script.shです。

于 2011-01-04T09:23:12.907 に答える