我有一个名为g2p的bash脚本文件,其运行方式如下:
$echo "teststring" | ./g2p @g2pumap=./map.txt
现在我正在使用python2.6编写python脚本,我需要在python中运行这个bash脚本(g2p)。你知道吗
我检查了这个答案:Python: subprocess and running a bash script with multiple arguments
我写道:
import subprocess
val = subprocess.check_call(["./eng_GBR/g2p", "./map.txt"], shell=True)
我的问题是如何在python代码中向g2p(bash脚本)发送标准输入,而且我对将值传递给@g2pumap参数有点困惑。你知道吗
对Python2.6的限制后来被添加到问题中。答案的最后是一个可移植的解决方案。
由于python3.5,^{} 应该匹配大多数“用X调用程序”用例。它的
input
参数满足您的要求:您可以直接向其输入字节字符串:
这相当于您的bash调用。注意,您必须自己添加适当的换行符(
b"\n"
在末尾)。任何参数,如@g2pumap=./map.txt
,都可以在不转义的情况下传入。你知道吗如果您想要有
check_call
的异常,请在后面使用g2p_process.check_returncode()
。你知道吗如果您使用的是较旧的版本或需要向后兼容,那么使用裸的
subprocess.Popen
是最可移植的。下面应该处理您的用例:注意,如果需要,还可以捕获stdout和stderr。在对
Popen
的调用中使用stdout=subprocess.PIPE
和/或stderr=subprocess.PIPE
。这样做让g2p_process.communicate
返回一个有意义的(stdoutdata, stderrdata)
元组。你知道吗请参阅} ,因为它可以进行正确的错误处理。你知道吗
subprocess.Popen
method docs中有关如何处理此类对象的内容。通常最好检查它的returncode
或kill
悬挂进程。如果您愿意,还可以复制^{相关问题 更多 >
编程相关推荐