我想暂时在一个块的持续时间内将stderr重定向到Ruby脚本中,确保在块结束时将其重置为原始值.
我很难在ruby文档中找到如何做到这一点.
Bash如何将stderr捕获到变量?
我想在我的bash脚本中做这样的事情
sh -c path/myExcecutable-bin 2>&1 =MYVARIABLE
Run Code Online (Sandbox Code Playgroud)
如何将stderror输出发送给变量?
如何将stderr和stdout重定向到文件以获取Ruby脚本?
我无法弄清楚如何回显标准错误流并重定向可执行文件的错误流.
我来自Bourne shell和Korn shell背景,我将使用它;
# Write to stderr
echo "Error Message!" >&2
# Redirect stderr to file
/do/error 2>/tmp/err.msg
Run Code Online (Sandbox Code Playgroud) 我知道这个语法
var=`myscript.sh`
Run Code Online (Sandbox Code Playgroud)
要么
var=$(myscript.sh)
Run Code Online (Sandbox Code Playgroud)
将捕获结果(stdout)myscript.sh转化为var.我可以重定向stderr到stdout,如果我想同时捕获.如何将它们中的每一个保存为单独的变量?
我在这里的用例是如果返回代码非零,我想要回显stderr并禁止其他方式.可能有其他方法可以做到这一点,但这种方法似乎可行,如果它实际上是可能的.
打印应用程序的"用法"时,是应该在stdout还是stderr上完成?
根据应用程序,我看过几个案例,但似乎没有一个规则.也许我错了,有一个很好的做法.在那种情况下,它是什么?
是否有可能在一次运行中将stdout从外部程序重定向到外部程序的变量和stderr到另一个变量?
例如:
$global:ERRORS = @();
$global:PROGERR = @();
function test() {
# Can we redirect errors to $PROGERR here, leaving stdout for $OUTPUT?
$OUTPUT = (& myprogram.exe 'argv[0]', 'argv[1]');
if ( $OUTPUT | select-string -Pattern "foo" ) {
# do stuff
} else {
$global:ERRORS += "test(): oh noes! 'foo' missing!";
}
}
test;
if ( @($global:ERRORS).length -gt 0 ) {
Write-Host "Script specific error occurred";
foreach ( $err in $global:ERRORS ) {
$host.ui.WriteErrorLine("err: $err");
}
} else {
Write-Host …Run Code Online (Sandbox Code Playgroud) 我正在学习Programming Ruby 1.9中的语言,并且他们在本书的早期将STDERR.puts写入了一个代码块,而没有解释他们为什么使用它或者它与puts有什么不同.
我用谷歌搜索并解释了这个术语,但我从研究中得到的只是它涉及诊断.编程Ruby提供的代码中没有任何地方似乎存在错误异常处理的链接.
这是代码.
require_relative 'csv_reader'
reader = CsvReader.new
ARGV.each do |csv_file_name|
STDERR.puts "Processing #{csv_file_name}"
reader.read_in_csv_data(csv_file_name)
end
Run Code Online (Sandbox Code Playgroud)
我确实设法在某处读取STDERR.puts用于错误处理的约定,但我想我问它是否与puts有什么不同.
我想将子进程的stderr输出重定向到stdout.常数STDOUT应该这样做,不应该吗?
然而,
$ python >/dev/null -c 'import subprocess;\
subprocess.call(["ls", "/404"],stderr=subprocess.STDOUT)'
Run Code Online (Sandbox Code Playgroud)
做输出的东西.为什么会这样,我如何在stdout上收到错误消息?
要将stdout和stderr重定向(并附加)到文件中,同时还在终端上显示它,我这样做:
command 2>&1 | tee -a file.txt
Run Code Online (Sandbox Code Playgroud)
但是,有没有其他方法可以做到这一点,以便我获得退出状态的准确值?
也就是说,如果我测试$?,我想看到退出状态command,而不是退出状态tee.
我知道我可以${PIPESTATUS[0]}在这里使用而不是$?,但我正在寻找另一种不需要检查的解决方案PIPESTATUS.
stderr ×10
stdout ×5
bash ×3
ruby ×3
command-line ×2
powershell ×2
pipe ×1
python ×1
redirect ×1
stream ×1
subprocess ×1
tee ×1
windows ×1