2016-12-01 64 views
0

此代碼不能正常工作:如何使用Ruby讀取STDERR狀態?

my_command = %x{java -version &>/dev/null} 
if $? != 0 

我怎麼看STDERR/STDOUT狀態代碼是什麼? 我嘗試使用puts

puts "values ===> $? or or '$?' my_command or #{my_command} %x{echo $?}" 

,但它不工作。

+1

STDERR或STDOUT都沒有代碼,它們是IO流。像反引號一樣,'%x''返回子進程發送給STDOUT的所有內容。 –

回答

0

爲了獲得狀態代碼:

stdout = %x(ls -l) 
exit_code = $?.exitstatus 

然後

if exit_code == 0 then 
    puts "Success" 
else 
    puts "Problem" 
end 
1

使用%x或等價的東西是這樣做的一個簡單的方法,但不給你很多的控制。而是使用Open3庫和popen3

require 'open3' 

Open3.popen3("java", "-version") do |stdin, stdout, stderr, wait_thr| 
    version = stdout.chomp 

    status = wait_thr.value 
end 
+2

'Open3'功能非常強大,當我編寫非重要代碼時,我可以使用這個工具。 '%x'或使用反引號確實方便快捷和骯髒的工作。 :-) –