此代碼不能正常工作:如何使用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 $?}"
,但它不工作。
此代碼不能正常工作:如何使用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 $?}"
,但它不工作。
爲了獲得狀態代碼:
stdout = %x(ls -l)
exit_code = $?.exitstatus
然後
if exit_code == 0 then
puts "Success"
else
puts "Problem"
end
使用%x
或等價的東西是這樣做的一個簡單的方法,但不給你很多的控制。而是使用Open3庫和popen3
:
require 'open3'
Open3.popen3("java", "-version") do |stdin, stdout, stderr, wait_thr|
version = stdout.chomp
status = wait_thr.value
end
'Open3'功能非常強大,當我編寫非重要代碼時,我可以使用這個工具。 '%x'或使用反引號確實方便快捷和骯髒的工作。 :-) –
STDERR或STDOUT都沒有代碼,它們是IO流。像反引號一樣,'%x''返回子進程發送給STDOUT的所有內容。 –