【发布时间】:2015-03-08 16:06:09
【问题描述】:
如何使用subprocess 而不是os 在 Bash 中运行如下命令?:
import os
text = "~|||-:this is text:-|||~"
fileName = "sound.wav"
command =\
"IFS= read -d \'\' text <<EOF\n" +\
text + "\n" +\
"EOF\n" +\
"echo \"${text}\" | sed -e 's/\([[:punct:]]\)//g' | text2wave -scale 1 -o " + fileName
os.system(command)
理想情况下,这将在 Bash 中计算为以下内容:
IFS= read -d '' text <<EOF
~|||-:this is text:-|||~
EOF
echo "${text}" | sed -e 's/\([[:punct:]]\)//g' | text2wave -scale 1 -o sound.wav
请注意,我在命令中同时使用了 here-document 和多个管道。我知道我不需要在命令中进行 sed 处理,但我正在尝试使用 subprocess 在 Bash 中运行这样的命令。
目前,我在subprocess 命令过程中看到了一些“管道”的实现,但与简单的竖线符号相比,这些实现非常冗长。我可以想象这个场景会变成多管的噩梦。至于这里的文档,我不知道如何用subprocess 来实现它们。我会重视您可能拥有的有关实施此功能的任何指导。
程序 text2wave 是Festival 的一部分,如果您有兴趣的话。
【问题讨论】:
-
所有的文本转换都可以轻松移植到 Python 中,然后只剩下
text2wave命令在外部执行。实际上,如果 Festival 库有一个 Python 包装器,您也可以用它替换它,我不会感到惊讶。 -
实际上整个
while循环是不优雅和多余的;您应该直接将此处的文档提供给sed。 -
非常感谢您的 cmets。正如我所提到的,我知道有一些优雅的方法可以在 Python 中实现命令的功能,但这并不是我想要做的。我正在尝试采用 given 命令,该命令具有此处文档和多个管道,并将其与 Python 的
subprocess模块一起使用。我正在尝试学习如何在使用subprocess时处理此处的文档和管道。
标签: python pipe subprocess heredoc