我有一个需要--file xyz.json
参数的Python脚本。
事实上,我的JSON是巨大的,因此它是Gzipped。当然我可以解压缩然后运行脚本,但这看起来很浪费。有没有一种聪明的方法可以让我在做zcat xyz.json.gz | myscript.py --file ?????
时工作。我不想修改myscript.py
来读取stdin而不是文件,除非没有办法完成此操作。
谢谢!
答案 0 :(得分:4)
尝试:
myscript.py --file <(zcat xyz.json.gz)
返回包含管道的文件描述符。如果脚本只读取文件,并且不向前和向后搜索,这应该可以。
<( ... )
被称为process substitution。
详细说明会发生什么:
% awk 'BEGIN{print "filename:", ARGV[1]};1' <(echo first; sleep 1; echo second)
filename: /proc/self/fd/11
first
second
延迟后会second
打印出来。所以:Awk获取文件名/proc/self/fd/11
,并开始处理它。它会立即看到第一行,并将其打印出来。然后,在睡眠之后,它将看到第二行,并打印出来。
答案 1 :(得分:2)
您可以使用/dev/stdin
或(等效)/dev/fd/0
:
zcat xyz.json.gz | myscript.py --file /dev/stdin
zcat xyz.json.gz | myscript.py --file /dev/fd/0