【问题标题】:How to use a pipe if a command specifies a file for output如果命令指定要输出的文件,如何使用管道
【发布时间】:2018-08-02 09:48:01
【问题描述】:

我有一个命令行实用程序,它接受一个文件作为其输出。我想通过管道输出此输出以进行进一步处理。

我第一次尝试这个:

command - | anothercommand

但它不起作用,它解释了 - 字面意思。 (所以它创建了一个名为 - 的文件)

这确实有效:

command >(anothercommand)

这很好,但我想知道它是否仍然可以用管道完成。

我想到了

command >(tee) | anothercommand

但这只会将输出发送到标准输出。

【问题讨论】:

  • command | anothercommand 有效吗?你的最后一个例子暗示它应该。
  • 不,如果我不指定文件,程序会提示我提供输出文件名。
  • 哦,对了,tee 的标准输出到anothercommand
  • 我没有将输出发送到anothercommand,而只是发送到标准输出。我认为这是因为>(...) 产生了一个子shell,stdout 没有被管道拾取。

标签: linux bash shell pipe zsh


【解决方案1】:

你可以使用/dev/stdout作为你的输出文件:

command /dev/stdout | anothercommand

【讨论】:

  • 请注意,这仅是正确的,因为问题被标记为linux - 它不能移植到其他风格的 Unix 家族。如果命令期望 seek()mmap() 其输出,它可能仍然会失败。
  • 你说得对,它只适用于 Linux。其他 Unix 或 Windows 是不同的。关于搜索...问题表明重定向到另一个命令有效(>(anothercommand)),因此在这种情况下不涉及搜索。无论如何,对于未来的寻求答案的人来说都是好点:-)
  • 完美解决了这个问题。我现在可以像这样在 Python 中使用它:res = subprocess.run(['command', '/dev/stdout', stdout=subprocess.PIPE)
猜你喜欢
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多