Linux:stdout一个程序到stdin的另一个程序

时间:2014-10-29 23:12:06

标签: python linux terminal argparse pipeline

我检查了Reading stdout from one program in another program但未找到我要找的答案

我是Linux新手,我在Python中使用argparse模块通过Mac上的终端运行程序参数

我有program_1.py通过sys.stdin输入文件并将数据输出到sys.stdout

我正在尝试让program_2.py接收从program_1.py输出到sys.stdout的数据并将其作为sys.stdin

接收

我尝试了以下几点:

Mu$ python program-1.py <sample.txt> program-2.py 

为简单起见,我们假设'sample.txt'只有字符串'1.6180339887'

program_2.py如何读取上一个程序的sys.stdout,因为它是sys.stdin?

在这个简单的例子中,我只是想让program_2.py输出'1.6180339887'到sys.stdout,这样我就可以看到它是如何工作的。

有人告诉我使用|管道的字符,但我无法使其正常工作

2 个答案:

答案 0 :(得分:2)

使用管道是正确的:

python program-1.py sample.txt | python program-2.py 

这是一个完整的例子:

$ cat sample.txt                                                             
hello                                                                        

$ cat program-1.py                                                           
import sys                                                                   
print open(sys.argv[1]).read()                                               

$ cat program-2.py                                                           
import sys                                                                   
print("program-2.py on stdin got: " + sys.stdin.read())                      

$ python program-1.py sample.txt                                             
hello                                                                        

$ python program-1.py sample.txt | python program-2.py                       
program-2.py on stdin got: hello  

(PS:你可以在你的问题中包含一个完整的测试用例。这样,人们可以说出你做错了什么而不是自己编写)

答案 1 :(得分:0)

program-1.py:

import sys

if len(sys.argv) == 2:
    with open(sys.argv[1], 'r') as f:
        sys.stdout.write(f.read())

program-2.py:

import sys

ret = sys.stdin.readline()
print ret

sample.txt的

1.6180339887
在你的shell中

Mu$ python p1.py txt | python p2.py

输出:

1.6180339887

更多信息: http://en.wikipedia.org/wiki/Pipeline_(Unix)http://en.wikibooks.org/wiki/Python_Programming/Input_and_Output