让Python打印到命令行(graphviz命令gvpr的输出)

让Python打印到命令行(graphviz命令gvpr的输出),python,visualization,data-visualization,graphviz,dot,Python,Visualization,Data Visualization,Graphviz,Dot,我正在尝试让Python运行此命令,该命令在命令提示符下运行良好: ccomps -x rel_graph.dot | gvpr -c "N[nNodes($G)<5]{delete(0,$)}" | dot | gvpack | sfdp -Goverlap=prism | gvmap -e | gvpr "BEGIN{int m,w,e = 0} N[fontcolor=='blue']{m += 1} N[fontcolor=='green']{e += 1} N[fontcolor

我正在尝试让Python运行此命令,该命令在命令提示符下运行良好:

ccomps -x rel_graph.dot | gvpr -c "N[nNodes($G)<5]{delete(0,$)}" | dot | gvpack | sfdp -Goverlap=prism | gvmap -e | gvpr "BEGIN{int m,w,e = 0} N[fontcolor=='blue']{m += 1} N[fontcolor=='green']{e += 1} N[fontcolor=='red']{w += 1} END{print(m); print(w); print(e);}"

ccomps-x rel_graph.dot | gvpr-c“N[nNodes($G)您可以将stdout\stderr发送到如下文件-

from subprocess import Popen
std_out_file = "/tmp/stdout.log"
std_err_file = "/tmp/stderr.log"
command_to_execute = "<your-command>"
with open(std_out_file, "wb") as out, open(std_err_file, "wb") as err:
        p = Popen(command_to_execute, shell=True, cwd=<folder>, stdout=out, stderr=err)
p.communicate()
您可以检查命令的返回代码,以检查是否还需要像这样打印stderr-

if p.returncode == 0:

经过更多的工作后,我将BEGIN引号改为双引号,将所有内部参数改为单引号,这似乎解决了问题。

谢谢!我尝试了这个方法,出于某种原因,预期的标准程序输出(~250行)会转到std_err而不是std_out,但它仍然缺少最后几个打印命令。
f = open(std_out_file, "r")
stdout = f.readlines()
f.close()   
if p.returncode == 0: