まず、私は、最初の部分(ディレクトリスキャン)(いくつかのコメントは、よりエレガントなリスト内包表記のソリューションを提案していても)あなたのアプローチが動作するためsubprocess
部分について
、あなた」に応答しません私はそれについて答えさせてください。
コマンドを1つの文字列で渡す必要があります.2つではなく、さらにはそれよりも優れているため、ファイル名にスペースや奇妙な文字が含まれる場合は、subprocess
でコマンドを引用符で保護します。その後
、書き込み用のログファイルを開き、ループの中で、あなたのPopen
のコマンドを実行して、開いているファイルへのp.stdout
を書く:標準誤差は、あなたがない限り、出力ファイルに書き込まれないことを
with open("the_log","w") as logfile:
for inputFile in myListOfFiles:
p = subprocess.Popen(["java","-jar","avro-tool-1.8.1.jar","repair","-o","report",inputFile],stdout=subprocess.PIPE)
logfile.write(p.stdout.read())
p.wait()
は注意余分な引数としてstderr=subprocess.STDOUT
を渡します。
もちろん、最初にすべてのファイルをスキャンしてリストに入れてから、上記のように2番目のループを実行するのを避けることができます。あなたは(コマンドではなく、サブプロセスで)達成したいコマンドラインの例を投稿することができます
import os,subprocess
with open("the_log","w") as logfile:
for root, dirs, files in os.walk("/home/documents/", topdown=False):
for name in files:
inputFile = os.path.join(root, name)
p = subprocess.Popen(["java","-jar","avro-tool-1.8.1.jar","repair","-o","report",inputFile],stdout=subprocess.PIPE)
logfile.write(p.stdout.read())
p.wait()
:あなたはこのようなあなたの
os.walk
ループでsubprocess.Popen
コールをマージすることができます。 PS:あなたのサブプロセス呼び出しが間違っています。しかし、私はそれを修正するのに役立つ作業コマンドが必要です。 –いいこと、1秒私はあなたのためにそれを手に入れましょう。 –
あなたはどのようにリスト(タイトル)を印刷するか、またはサブプロセスの出力をファイル(本体)に書き込む方法を知りたいですか? – davidism