Python,子进程,如何传递多个变量

时间:2012-10-05 09:23:13

标签: python 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) 

有人可以帮忙吗?

感谢。

2 个答案:

答案 0 :(得分: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) 

围绕(路径,路径_f)和删除百分比添加了注意括号

答案 1 :(得分:0)

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

因为它可以让你更好地控制发生的事情,特别是没有shell转移过你的方式。

例如,假设pathpath_f值为'My 9" collection'等。这会使findgrep命令中的shell混淆。有很多方法,但它们比上面更难。

请参阅here