如何管道虚拟文件?
How to pipe virtual files?
我正在使用这些命令在 inkscape 中转换一些文件:
python dxf_input.py sample.dxf > output_ink.svg
python scour.inkscape.py output_ink.svg > output.svg
这个方法效果很好。但是,我不想创建文件 "output_ink.svg"。相反,我想将该文件通过管道传递给第二个命令。
我尝试了很多东西。
使用 xargs:
python dxf_input.py sample.dxf | xargs python scour.inkscape.py > output.svg
scour.inkscape.py: error: no such option: -3
python dxf_input.py sample.dxf | xargs -I{} python scour.inkscape.py {} > output.svg
xargs: argument line too long
使用先进先出:
python scour.inkscape.py <(>(python dxf_input.py sample.dxf))
xml.parsers.expat.ExpatError: no element found: line 1, column 0
使用普通管道:
python dxf_input.py sample.dxf | python scour.inkscape.py > output.svg
IOError: [Errno 32] Broken pipe
到目前为止没有任何效果。
并非所有程序都可以接受来自任何类型的 FIFO 的输入——无论是常规管道、命名管道、/dev/fd/NN
描述符(由<()
在允许这样做的平台上)等——因为 FIFO 本质上是不可搜索的:您不能像使用常规文件那样返回到开头并重新读取之前的内容;您不能直接跳到文件的不同部分,稍后再回来;等等
因此,在要求 "pipe".
的约束下,不存在适用于所有可能程序的解决方案
首先,如果如果 scour.inkscape.py
可以从 FIFO 中读取,什么会起作用:
python scour.inkscape.py <(python dxf_input.py sample.dxf)
如果它不能从 FIFO 读取,而是需要一个常规文件,bash 没有相关原语,但 zsh 有:
# This needs zsh, not bash
python scour.inkscape.py =(python dxf_input.py sample.dxf)
我正在使用这些命令在 inkscape 中转换一些文件:
python dxf_input.py sample.dxf > output_ink.svg
python scour.inkscape.py output_ink.svg > output.svg
这个方法效果很好。但是,我不想创建文件 "output_ink.svg"。相反,我想将该文件通过管道传递给第二个命令。
我尝试了很多东西。
使用 xargs:
python dxf_input.py sample.dxf | xargs python scour.inkscape.py > output.svg
scour.inkscape.py: error: no such option: -3
python dxf_input.py sample.dxf | xargs -I{} python scour.inkscape.py {} > output.svg
xargs: argument line too long
使用先进先出:
python scour.inkscape.py <(>(python dxf_input.py sample.dxf))
xml.parsers.expat.ExpatError: no element found: line 1, column 0
使用普通管道:
python dxf_input.py sample.dxf | python scour.inkscape.py > output.svg
IOError: [Errno 32] Broken pipe
到目前为止没有任何效果。
并非所有程序都可以接受来自任何类型的 FIFO 的输入——无论是常规管道、命名管道、/dev/fd/NN
描述符(由<()
在允许这样做的平台上)等——因为 FIFO 本质上是不可搜索的:您不能像使用常规文件那样返回到开头并重新读取之前的内容;您不能直接跳到文件的不同部分,稍后再回来;等等
因此,在要求 "pipe".
的约束下,不存在适用于所有可能程序的解决方案首先,如果如果 scour.inkscape.py
可以从 FIFO 中读取,什么会起作用:
python scour.inkscape.py <(python dxf_input.py sample.dxf)
如果它不能从 FIFO 读取,而是需要一个常规文件,bash 没有相关原语,但 zsh 有:
# This needs zsh, not bash
python scour.inkscape.py =(python dxf_input.py sample.dxf)