我在Python中运行Bash系统命令,并且在使用read
在命令中定义here-document时遇到了这个问题:
import os
text = "~|||-:this is text:-|||~"
fileName = "sound.wav"
command =\
"IFS= read -d \'\' text <<EOF\n" +\
text + "\n" +\
"EOF\n" +\
"echo \"${text}\" | text2wave -scale 1 -o " + fileName
os.system(command)
你能帮我弄清楚如何解决这个问题吗?
这是一个略微简化的版本:
import os
text = "~|||-:this is text:-|||~"
command =\
"IFS= read -d \'\' text <<EOF\n" +\
text + "\n" +\
"EOF\n" +\
"echo \"${text}\""
os.system(command)
我想在上面的一个中明确表示我正在使用烟斗。当我运行它时,我收到以下错误:
sh:1:读:非法选项-d
答案 0 :(得分:1)
没有理由在shell中做到这一切。 Python可以直接写入将运行text2wave
的进程的标准输入。以下是使用subprocess
模块的示例。
p = subprocess.Popen(["text2wave", "-scale", "1", "-o", filename], stdin=subprocess.PIPE)
p.stdin.write(text + "\n")
p.wait()
答案 1 :(得分:0)
执行此操作的更加pythonic的方法是使用subprocess,方法是将stdin
指定为check_call
或使用Popen.communicate
。
此外,-d
可能不是您的read
版本中的有效选项。 help [r]ead
告诉你什么?