我如何使用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中得到以下结果:
^{pr2}$请注意,我在命令中同时使用here文档和多个管道。我知道我不需要在命令中进行sed处理,但是我正在特别尝试使用subprocess
在Bash中如何运行这样一个命令。在
目前,我在subprocess
命令过程中看到了“pipes”的一些实现,但是与简单的竖线符号相比,这些实现非常冗长。我可以想象这样的场景会变成噩梦般的多个管道。至于这里的文档,我不知道如何用subprocess
来实现它们。我会珍惜你可能有的任何关于实现这一点的指导。在
如果您感兴趣,text2wave程序是Festival的一部分。在
如果外壳很适合您的问题,那么一定要使用外壳。在
您有时希望将某些东西移植到Python的原因至少对我来说是出于更好的控制:您希望能够捕捉到管道中间的错误(在您的shell脚本中是这样的),或者您希望在处理过程的中途将结果保存在某个地方,这在shell中做起来很麻烦,因为管道是友好的一维的。在
如果你真的坚持,那么你提到的资源(但没有链接)是通常的做法;但由于上述原因,这并不特别“常见”。在
下面是一个不使用shell的示例,改编自this question:
我确信这可以扩展到两个以上的子进程,但我也坦率地相当肯定,如果你真的需要弄清楚的话,你做的是错误的。在
。。。而且,正如在评论中已经指出的,
^{pr2}$sed
部分可以很容易地被simple Python snippet替换还要注意Python多行字符串如何替换here文档。在
这里docs和pipes(
|
)是shell的属性。如果要逐字运行命令,请使用shell=True
:作为@tripleee said,可以用Python实现部分甚至整个命令。在
带有
os.popen
的演示: 公司名称:或者
^{pr2}$相关问题 更多 >
编程相关推荐