コマンドはbash
で正常に実行されますが、は/bin/sh
でコマンドを実行しています。あなたがチェックすることができます。
>>> os.system('echo $0')
sh
0
/bin/sh
で実行する場合、コマンドが失敗します。
[[email protected] ~]$ /bin/sh
sh-4.3$ diff -u <(echo "aba"| fold -w1) <(echo "abaa" | fold -w1)
sh: syntax error near unexpected token `('
sh-4.3$
あなたが明示的にこのようなbash
でコマンドを実行できます。
>>> os.system("""bash -c 'diff -u <(echo "aba"| fold -w1) <(echo "abaa" | fold -w1)'""")
--- /dev/fd/63 2017-02-26 09:18:14.633395225 +1100
+++ /dev/fd/62 2017-02-26 09:18:14.633395225 +1100
@@ -1,3 +1,4 @@
a
b
a
+a
256
ますので、おそらくあなたが通常できるコマンドの出力に興味がありますコマンドを実行してその出力を収集するにはsubprocess.check_output()
を使用してください。残念ながらdiff
は、入力ファイルの違いを検出したときにゼロ以外の終了コードを返すのが好きなので、単にcheck_output
を使用しないようにします。あなたはcat
を通じてdiff
の出力をパイプでごまかすことができます。
>>> from subprocess import check_output
>>> output = check_output(['bash', '-c', 'diff -u <(echo "aba"| fold -w1) <(echo "abaa" | fold -w1) | cat'])
>>> print(output)
b'--- /dev/fd/63\t2017-02-26 10:02:56.814044987 +1100\n+++ /dev/fd/62\t2017-02-26 10:02:56.814044987 +1100\[email protected]@ -1,3 +1,4 @@\n a\n b\n a\n+a\n'
>>> print(str(output, encoding='utf8'))
--- /dev/fd/63 2017-02-26 10:02:56.814044987 +1100
+++ /dev/fd/62 2017-02-26 10:02:56.814044987 +1100
@@ -1,3 +1,4 @@
a
b
a
+a
最良の方法は、パイプと一緒にチェーン3 'Popen'オブジェクトを使用することであろうことができます。 –
@ Jean-FrançoisFabre:それは本当ですが、それはあなたの視点にかかっています。 OPは 'os.system()'について質問しています。 – mhawke
私はあなたの答えを批判していませんでしたが、質問:+1は私のものです。私はその答えではなく、その質問にコメントしたはずです。私はPythonで3つのパイプを書こうとしていないためにあなたを非難することはできません! –