gpt4 book ai didi

从输出文件重定向,以便可以捕获

转载 作者:行者123 更新时间:2023-12-04 07:58:24 25 4
gpt4 key购买 nike

一个程序foo写入输出文件并将诊断信息打印到 stdout .
因此:

foo -o ./out  -i ./input  > log
结果是 ./out 中的有值(value)的东西以及 log 中的一些笨拙的庞然大物.
我需要阅读 ./out进入另一个程序(我正在编写的 R 脚本)。
写入文件的中间步骤 ./out再次阅读很慢,我需要为大 ./out这样做文件,数百次。
我想执行某种重定向,以便 foo写入文件描述符而不是文件 ./out ,我可以直接读入我的脚本。但是 stdout已经使用。
这是我尝试过的:
R :
library(data.table)
fread(cmd = "foo -o /dev/stdout -i ./input > /dev/null")
但我收到一个错误:
  File '/data1/tmp/RtmpkKIpBm/fileeb789130da8e3' has size 0. Returning a NULL data.table.

最佳答案

foo -o >(cat)  -i ./input  > log
演示:
$ cat foo 
#!/bin/bash

if [ "$1" != "-o" ]; then
exit 2
fi
echo "mumbo jumbo stdout" >&1
echo "valueable info" > "$2"
echo "mumbo jumbo stderr" >&2 # threw in stderr for good measure
$ ./foo -o x
mumbo jumbo stdout
mumbo jumbo stderr
$ cat x
valueable info
$ rm x
$ ./foo -o /dev/stdout
mumbo jumbo stdout
valueable info
mumbo jumbo stderr
$ ./foo -o /dev/stdout &>/dev/null
$ ./foo -o >(cat) &>/dev/null
valueable info
解释:
每个进程都有自己的标准输出。与 ./foo -o /dev/stdout &>/dev/null ,你在告诉 foo将其有值(value)的信息输出到自己的标准输出中,即 /dev/null .但与 ./foo -o >(cat) &>/dev/null ,你在告诉 foo将其有值(value)的信息输出到某个管道中,该管道转到 cat ,其标准输出不是 /dev/null ,而是从 shell 继承。
在演示中,shell 的标准输出是终端,但如果它来自 R 的 fread() ,shell 的标准输出和 cat的标准输出会去哪里 fread()可以阅读它们。

关于从输出文件重定向,以便可以捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66589178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com