我使用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
因为它能让你更好地控制发生的事情,特别是没有贝壳逃逸横穿你的道路。
例如,假设
path
或path_f
值为'My 9" collection'
等,这将混淆find
和grep
命令的shell。有办法解决,但比上面难。见here。