コメントで言及したように、os.system
は/bin/sh
でコマンドを実行します。これが/bin/bash
へのリンクであっても、Bashを/bin/sh
として実行すると、実行中のコマンドのようなBash固有の構文が機能しないPOSIX準拠モードに切り替わります。
一つの解決策は、使用することです:
os.system("/bin/bash -c 'ls > >(tee -a a)'")
これはかなり粗である - それは、目的のコマンドを実行するために、新しいシェル/bin/bash
を実行するためにシェル/bin/sh
を使用しています。本当にこれをやりたければ、パッケージsubprocess
の関数を使って直接Bashを実行すると、より洗練されたものになります。
この場合、もっと簡単な解決策があると思います。 「パイプ」構文:
os.system("ls | tee -a a")
は/bin/sh
互換である、と私はそれはあなたがここでやろうとしている同じことを実現すると思います。
別のコメントで述べたように、それはどちらか、ハードは純粋なPythonでこれを実行するということではありません。
# Python 3
with open("a", "a") as o:
for f in os.listdir("."):
print(f)
print(f, file=o)
# Python 2
with open("a", "a") as o:
for f in os.listdir("."):
print f
print >>o, f
shはその構文を許可していません。 POSIXシェルはbashではありません。 'os.system()'は '/ bin/bash'ではなく'/bin/sh'を使います。 –
あなたが達成しようとしているものは、おそらくPythonを使うべきです。 –