我正在使用子进程模块来运行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)
有人可以帮忙吗?
感谢。
答案 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转移过你的方式。
例如,假设path
或path_f
值为'My 9" collection'
等。这会使find
和grep
命令中的shell混淆。有很多方法,但它们比上面更难。
请参阅here。