import subprocess
subprocess.Popen("egrep -r --exclude=*{.git,.svn}* \"text\" ~/directory", stdout=subprocess.PIPE, shell=True).communicate()[0]
不幸的是,bash完全忽略了–exclude = * {.git,.svn} *标志.
我把问题缩小到花括号. –exclude = * .git *将通过python的popen工作,但是引入花括号的那一刻,我无助了.有什么建议?
注意:我尝试使用Python的命令库运行命令,它产生完全相同的输出 – 并且完全相同的忽略–exclude标志.
解决方法:
我猜它可能是shell逃逸?
最好自己拆分参数,并完全避免使用shell?
import subprocess
subprocess.Popen(["egrep","-r","--exclude=*{.git,.svn}*","text","~/directory"], stdout=subprocess.PIPE).communicate()[0]
注意:您可能需要扩展〜,我不确定.
或者如果bash应该扩展大括号,那么你可以在python中做到:
excludes = ['.git','.svn']
command = ['egrep','-r']
for e in excludes:
command.append('--exclude=*%s*'%e)
command += ["text","~/directory"]
subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。