paramikoでパイプコマンドを実行するにはどうすればよいですか? 私はこれをやっています:
statement = 'grep thing file | grep thing2 | tail -1'
last_msg = conn.execute(statement)
のみの出力が得られますgrep thing file
。
grep
扱いがわからないからです|
。いくつかの厄介なエスケープの準備をしてください:
statement = """sh -c 'grep thing file | grep thing2 | tail -1'"""
これにより、反対側にシェルが作成され、文字列を解釈するように要求されますgrep thing file | grep thing2 | tail -1
。sh -c
単一の引数のみを受け入れるため、一重引用符が必要です。
そうすれば、シェルがパイプを作成し、すべてのコマンドを実行します。file
また、ファイル名にスペースが含まれていないことを確認してください。その場合は、 を試してください"file"
。
ご覧のとおり、これはすぐに非常に醜くなります。パイプラインをシェルスクリプトに入れることをお勧めします。次に、引用符を避けて、スクリプトを実行するだけsh -c script.sh
です。