Python子进程模块:将字符串发送到两个链式子进程

时间:2012-09-02 03:59:18

标签: python subprocess

我正在尝试将字符串发送到第一个进程的stdin并将其stdout链接到第二个进程的stdin

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

第二个程序是lpr,行打印机命令。过程如下:

  1. 将字符串写入First Program的stdin
  2. 将第一个程序的输出传递给第二个程序的stdin。
  3. 第二个程序的输出在unix中自行处理:
  4. 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]
    

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

1 个答案:

答案 0 :(得分:2)

lpr=Popen(["/usr/bin/lpr"],stdin=paps.stdout)

stdout=PIPE怎么样?