我正在尝试一些Python的subprocess模块的示例,但是似乎无法使用heredoc语句。
这是我正在使用的简单示例:
import subprocess
a = "A String of Text"
p = subprocess.Popen(["cat", "<<DATA\n" + a + "\nDATA"])
当我运行上面的代码时,出现以下错误:
cat: <<DATA\nA String of Text\nDATA: No such file or directory
我做错了吗?这是否可能?如果可能,我该怎么做?
更新
只是想说,在真正的Python程序中,这不应该被执行,因为有更好的方法。
shell
参数为False
时,subprocess
模块直接执行您指定的程序(在您的情况下,可能是/bin/cat
),并使用调用Popen()
中指定的参数。不会对 shell 字符(如重定向或管道)进行任何解释,程序看到的正是您发送给它的内容。这就是为什么cat
说找不到以<<DATA
开头的文件名的原因。 - Greg Hewgill