错误“sh:1:读取:非法选项-d”在从Python运行的系统命令中使用here-document时

时间:2015-01-10 09:24:38

标签: python bash heredoc

我在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

2 个答案:

答案 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告诉你什么?