是否有一种单行方法可以在 linux bash 中运行以下 python 脚本,而不保存任何临时文件(/dev/std* 除外)? 我的 python 脚本 test.py 将文件名作为参数,但也将 sys.stdin 作为流输入。
#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
我想做类似的事情
hadoop fs -cat inputfile.txt > /dev/stdout | cat streamingfile.txt | python test.py /dev/stdin
但是当然这是行不通的,因为中间的 cat 破坏了预期的/dev/stdin 内容。能够做到这一点很好,从那时起我就不需要在每次需要使用它们时都在本地保存 hdfs 文件。
最佳答案
我想你要找的是:
python test.py <( hadoop fs -cat inputfile.txt ) <streamingfile.txt
在 bash 中,<( ... )
是Process Substitution .括号内的命令在其输出连接到 fifo 或等效物的情况下运行,并且 fifo 的名称(或 /dev/fd/n
如果 bash 能够使用未命名的管道)被替换为参数。该工具看到一个文件名,它可以正常打开和使用。 (>(...)
也可用,输入连接到 fifo,以防您需要命名的流输出。)
关于python - 对 python 输入文件参数和标准输入流使用两个管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21792428/