对python输入文件参数和stdin流使用两个管道

2024-10-03 17:28:26 发布

您现在位置:Python中文网/ 问答频道 /正文

在linuxbash中运行以下python脚本,而不保存任何临时文件(除了/dev/std*),是否有一种简单的方法? 我的python脚本测试.py接受文件名作为参数,但也系统标准作为流输入。在

#test.py
#!/usr/bin/python
import sys
fn=sys.argv[1]
checkofflist=[]
with open(fn,'r') as f:
    for line in f.readlines():
        checkofflist.append(line)

for line in sys.stdin:
    if line in checkofflist:
        # do something to line

我想做点什么

^{pr2}$

但这当然行不通,因为中间的cat破坏了预期的/dev/stdin内容。能够做到这一点是很好的,因为从那时起,我不需要每次都在本地保存hdfs文件。在


Tags: 方法inpydev脚本for参数文件名
2条回答

我想你想要的是:

python test.py <( hadoop fs -cat inputfile.txt ) <streamingfile.txt 

在bash中,<( ... )Process Substitution。圆括号内的命令在其输出连接到fifo或等效对象的情况下运行,并将fifo的名称(或/dev/fd/n如果bash能够使用未命名的管道)替换为参数。该工具会看到一个文件名,它可以打开并正常使用。(>(...)也可用,输入连接到fifo,以防需要命名的流式输出。)

如果不依赖bash进程替换,您也可以尝试

hadoop fs -cat inputfile.txt | python test.py streamingfile.txt

它提供streamingfile.txt作为命令行参数,供test.py用作要打开的文件名,并在标准输入上提供inputfile.txt的内容。在

相关问题 更多 >