我正在使用 Python 的子进程模块,尝试了一些示例,但我似乎无法让 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
我做错了吗?这可能吗?如果是这样,我将如何去做呢?
Update
只是想说,这不应该在真正的 python 程序中执行,因为有更好的方法可以做到这一点。
shell“heredoc”支持是一项 shell 功能。subprocess.Popen
默认情况下不会通过 shell 运行命令,因此这种语法肯定不起作用。
但是,由于您无论如何都在使用管道,因此无需使用 shell 的heredoc 支持。只需写下你的字符串a
到您刚刚启动的进程的标准输入管道。无论如何,这正是 shell 对定界符所做的事情。
你可以这样做Popen.communicate() http://docs.python.org/library/subprocess.html#subprocess.Popen.communicate:
p.communicate(a)
返回值communicate()
函数包含进程的输出(在两个流中,请参阅文档)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)