0

質問:

Pythonでsedをうまく使用するにはどうすればよいですか? コンマ区切りのホストのリストを取得するには、リモート サーバーでこのコマンドを実行する必要があります。bashから実行すると、host1、host2、host3などの必要なものが得られます

ここに私が持っているものがあります:

process = subprocess.Popen(["ssh $USER@mychefserver knife search node "chef_environment:*" | grep -i "node name" | egrep -i "stuff|ruff" | uniq -u | sort -n | cut -d ":" -f 2 | sed -e 's/^[ \t]*//' | tr '\n' ', '
"], shell=False, stdout=PIPE)

\n、\t などをエスケープする必要があることはわかっていますが、残りの部分で問題が発生しています。Python スクリプトから実行しようとすると、豊富なエスケープを試みたにもかかわらず、無効な構文のエラーが発生します。

4

1 に答える 1

2

"二重引用符で囲まれた文字列内で使用すると、文字列の引用符が壊れます。"likeをエスケープする必要があり\"ます。さらに、コマンド ラインのほとんどの二重引用符は、単一引用符に置き換えることができることに注意してください'。次のコードが機能するはずです。

process = subprocess.Popen(["ssh $USER@mychefserver knife search node \"chef_environment:*\" | grep -i 'node name' | egrep -i 'stuff|ruff' | uniq -u | sort -n | cut -d':' -f 2 | sed -e 's/^[ \t]*//' | tr '\n' ', '"], shell=False, stdout=subprocess.PIPE)
于 2013-05-02T22:06:57.550 に答える