2017-09-07 9 views
0

pipleを使用してpython subprocess.callを使用してWindows上でバッチスクリプトを実行します。私はすべての引数を持つバッチスクリプトを含む以下のリストを持っています。Python - パイプでファイルを書き込むsubprocessコマンド

process_list [ 'batch_script.bat', 'arg1', 'arg2', 'arg3' ] 

は、今私は

above command|grep -iE 'abc|xyz' 

は今、私はまた、ファイルに書き込むか、変数に格納したいパイプとgrepコマンドの下に使用していくつかの特定の行をgrepしたい、私はいくつかの解決策を見つけることを試みましたlike stdout=subprocess.PIPE

pipe_var= ' | grep -iE \'abc|xyz\'' 
process_list.append(pipe_var) 
subprocess.call(process_list, stdout=fo, shell=True) or this one 
subprocess.call(process_list, stdout=subprocess.PIPE, shell=True) 

しかし、それは私の要件に合っています。助けてもらえますか?

+0

は、私はあなたが '避けることができ(このため' grep'が、Pythonのネイティブ正規表現の一致を使用することはありません| = 'と' SHELを= True' then –

+0

サブプロセスは、Windows上のリストからシェルコマンドラインをビルドする方法を知らないので、 'shell = True'でargsリストを使うべきではありません(Unix上では別の理由でそれがさらに間違っています) grep式の "|"文字を二重引用符でエスケープする必要があります。 yz "''その後、stdoutにパイプを使用し、それを読み込み、ファイルに書き込むことを含め、出力に必要なものを実行します。 – eryksun

答えて

0

これに近いredirect stdout function

ものがある:

import sys 
sys.stdout = open('file.txt', 'w') 
print 'this will now goto file.txt' 
関連する問題