在写入文件时捕获系统命令的退出状态

时间:2015-05-19 08:47:40

标签: ruby system

我正在尝试执行shell命令来写入ruby中的文件,但我无法使用system获取退出状态:

table=File.new('exitStatusTest.txt','w')
exit_status=system(table.puts('ls'))
puts exit_status.to_s

这将抛出:exit_status.rb:5:in system': can't convert nil into String

虽然我期待一个TrueClass,与我使用时相同: exit_status=system('ls')

THX!

2 个答案:

答案 0 :(得分:0)

由于table.puts('ls')的结果为nil,system参数应为字符串。

table=File.new('exitStatusTest.txt','w')
output = `ls`
#output might be empty string.
table.puts(output) if not output.empty? # write data into file if output is not empty.
exit_status = !output.empty? # exit_status is true

`ls`.class
=> String
system('ls').class
=> TrueClass

答案 1 :(得分:0)

通过使用 system作为参数的结果调用table.puts,目前尚不清楚要实现的目标。

puts返回nil,因此您正在调用system(nil),收到非常可预测的异常。

假设您要执行命令并将放入表中,您可以尝试tap一个字符串:

str = 'ls' # or whatever
exit_status=system(str.tap { |s| table.puts(s) })