2

我正在使用 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) 

有人可以帮忙吗?

谢谢。

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

因为它可以让您更好地控制发生的事情,特别是没有外壳逃逸穿过您的方式。

例如,想象 apath或etc 的path_f'My 9" collection'。这会使 shell 在 thefindgrep命令上感到困惑。有一些方法可以解决它,但它们比上述方法更难。

这里

于 2012-10-05T09:51:50.243 回答