【问题标题】:Python subproccess module: send string to two chained subprocessesPython子进程模块:将字符串发送到两个链接的子进程
【发布时间】:2012-09-02 03:59:17
【问题描述】:

我正在尝试向第一个进程的标准输入发送一个字符串,并将它的标准输出链接到第二个进程的标准输入

第一个程序是paps,一个文本到postscript 转换器,它接受文本文件或字符串作为输入并将postscript 文件输出到stdout

第二个程序是lpr,行式打印机命令。流程是这样的:

  1. 将字符串写入第一个程序的标准输入
  2. 将第一个程序的输出通过管道传输到第二个程序的标准输入。
  3. 第二个程序的输出在 unix 中是这样自己处理的:

echo "The String" | paps | lpr

这是我从 python 文档中尝试过的。

#!/usr/bin/python

import sys
from subprocess import Popen,PIPE

paps=Popen(["/usr/local/bin/paps"],stdin=PIPE,stdout=PIPE)
lpr=Popen(["/usr/bin/lpr"],stdin=paps.stdout)
paps.communicate("ABCD")
paps.stdout.close()
lpr.communicate()[0]

这是来自文档:

#p1 = Popen(["dmesg"], stdout=PIPE)
#p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
#p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
#output = p2.communicate()[0]

在我的例子中,原始输出来自我的程序并被发送到第一个进程的标准输入。

【问题讨论】:

  • ...和?别让我挂了!
  • 那么,问题出在哪里?

标签: python subprocess


【解决方案1】:
lpr=Popen(["/usr/bin/lpr"],stdin=paps.stdout)

stdout=PIPE怎么样?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多