我检查了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,这样我就可以看到它是如何工作的。
有人告诉我使用|管道的字符,但我无法使其正常工作
答案 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