Bash : curly braces 的 Python 子进程

标签 python bash popen

我有以下 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 的 command 库运行该命令,它产生完全相同的输出——以及完全相同的被忽略的 --exclude 标志。

最佳答案

当您传递 shell=True 时,python 将命令转换为 /bin/sh -c <command> (如描述 here )。/bin/sh 显然不支持花括号扩展。您可以改为尝试以下操作:

import subprocess
subprocess.Popen(["/bin/bash", "-c", "egrep -r --exclude=*{.git,.svn}* \"text\" ~/directory"], stdout=subprocess.PIPE).communicate()[0]

关于Bash : curly braces 的 Python 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629618/

相关文章:

Python:在 Linux 中使用 Popen() 与文件对象写入文件

locking - popen - 锁还是不是线程安全的?

python - 子进程 Popen 和 call 有什么区别(我该如何使用它们)?

python - 恒星占星术 Python 库

python - 元组比较 'A' == ('A' ),如何避免这种情况?

arrays - 删除数组元素的最快方法是什么?

python - 使用来自单独文本文件的 ID 从 7 GB fasta 文件中提取多个序列

python - 如何在单个发布请求中将多个文本字符串发送到谷歌云自然语言API

java - 如何托管用 Python 加 Java 制作的应用程序

bash - 如何将 bash 命令输出到标准输出并同时通过管道输出到另一个命令?