0

如何访问其他文件流,如commPython 中的命令?

comm -23 <(sort -n Asub|uniq) <(sort -n A|uniq)

我知道我可以通过 访问标准输入sys.stdin,但是如何访问其他输入流呢?

4

1 回答 1

1

感谢您提出这个问题,因为我实际上并不了解<()自己的行为。然而,经过一番挖掘之后,它实际上会创建一个临时虚拟文件描述符,它将来自子命令的信息通过管道传输到该文件描述符中,然后返回该文件描述符的名称。要明白我的意思,看看这个 python 程序:

import sys
for arg in sys.argv:
    print('|{}|'.format(repr(arg)))

当它被调用时python3 thing.py <(cat a.txt) <(cat b.txt),你应该看到输出是这样的:

|'thing.py'|
|'/proc/self/fd/11'|
|'/proc/self/fd/12'|

最后,要回答您的问题,从该子进程读取数据所需要做的就是像打开任何其他文件一样简单地打开该文件描述符。例如:

with open(sys.argv[1]) as f:                                                                        
    for line in f:                                                                                    
        print(line.strip())

这给了我这样的输出:

A
B
C

(匹配a.txt的内容)

希望有帮助!

于 2016-11-15T21:54:56.320 回答