微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python子进程到Bash:花括号

我有以下Python行:

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] 举报,一经查实,本站将立刻删除。

相关推荐