2

サブプロセス モジュールを使用して、2 つの異なる変数を指定して find & grep コマンドを実行しています。構文エラーがありますが、表示されません。

1 つの変数を使用すると、問題なく実行されます。

path = "src"
path_f = "TC" 
subprocess.Popen('find /dir1/tag/common/dir2/dir3 /dir1/tag/common/dir2/dir3/dir4/ -iname "%s"'%path, shell=True) 

2 つの変数:

 subprocess.Popen('find /dir1/tag/common/dir2/dir3 /dir1/tag/common/dir2/dir3/dir4/ -iname "%s"* | grep "%s"  > fileList.txt'%path, %path_f, shell=True) 

誰かが助けることができますか?

ありがとう。

4

2 に答える 2

4

そのはず:

subprocess.Popen('find /dir1/tag/common/dir2/dir3 /dir1/tag/common/dir2/dir3/dir4/ -iname "%s"* | grep "%s"  > fileList.txt'% (path, path_f), shell=True) 

(path, path_f) の周りに括弧が追加され、パーセントが削除されていることに注意してください

于 2012-10-05T09:27:15.837 に答える
0

yakxxx は正しいですが、shell=True最適ではありません。

したほうがいい

sp1 = subprocess.Popen(['find', '/dir1/tag/common/dir2/dir3', '/dir1/tag/common/dir2/dir3', '/dir4/', '-iname', path], stdout=subprocess.PIPE)
sp2 = subprocess.Popen(['grep', path_f], stdin=sp1.stdout, stdout=open('fileList.txt', 'w'))
sp1.stdout.close() # for SIGPIPE from sp2 to sp1

何が起こるかをより適切に制御できるため、特にシェルのエスケープが邪魔になりません。

たとえば、pathまたはpath_fの値を想像してみてください。これにより、とコマンド'My 9" collection'の両方でシェルが混乱します。それを回避する方法はありますが、上記よりも困難です。findgrep

ここを参照してください。

于 2012-10-05T09:51:50.243 に答える