我使用subprocess模块运行一个find&grep命令,其中包含两个不同的变量。我有一个语法错误,但我看不出来。
只有一个变量,它运行得很好:

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

两个变量:
 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)

有人能帮忙吗?
谢谢。

最佳答案

yakxxx is right,但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

因为它能让你更好地控制发生的事情,特别是没有贝壳逃逸横穿你的道路。
例如,假设pathpath_f值为'My 9" collection'等,这将混淆findgrep命令的shell。有办法解决,但比上面难。
here

10-06 05:22