Mit*_*aro 4 python subprocess heredoc
我在玩Python的子流程模块,尝试了一些示例,但似乎无法使Heredoc语句起作用。
这是我正在玩的简单示例:
import subprocess
a = "A String of Text"
p = subprocess.Popen(["cat", "<<DATA\n" + a + "\nDATA"])
Run Code Online (Sandbox Code Playgroud)
运行上面的代码时出现以下错误:
cat: <<DATA\nA String of Text\nDATA: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我做错了吗?这有可能吗?如果是这样,我将如何去做?
更新资料
只是想说,永远不要在真正的python程序中执行此操作,因为有更好的方法可以执行此操作。
外壳程序“ heredoc”支持是外壳程序功能。subprocess.Popen
默认情况下不会通过外壳运行您的命令,因此此语法当然不起作用。
但是,由于无论如何都在使用管道,因此不需要使用Shell的Heredoc支持。只需将字符串写入a
刚开始的进程的stdin管道即可。无论如何,这正是外壳将使用heredoc执行的操作。
您可以使用Popen.communicate()
:
p.communicate(a)
Run Code Online (Sandbox Code Playgroud)
该communicate()
函数的返回值包含流程的输出(分为两个流,请参见文档)。