Ruby 运行进程,捕获其输出并退出代码
我知道如何运行外部流程,因为有很多方法可以这样做。但是如何将其输出和退出代码捕获到变量中呢?这些是最流行的流程运行方式,但它们并没有按照我的要求工作:Ruby 运行进程,捕获其输出并退出代码,ruby,Ruby,我知道如何运行外部流程,因为有很多方法可以这样做。但是如何将其输出和退出代码捕获到变量中呢?这些是最流行的流程运行方式,但它们并没有按照我的要求工作: a = `ls -l` # "a" captures only output b = system "ls -l " # "b" captures only exit code 我想看一下,因为它将允许您获得stout/stderr和退出状态 另请参阅本页,其中还详细介绍了popen4的用法 status = Open4::popen4("fa
a = `ls -l` # "a" captures only output
b = system "ls -l " # "b" captures only exit code
我想看一下,因为它将允许您获得stout/stderr和退出状态 另请参阅本页,其中还详细介绍了popen4的用法
status = Open4::popen4("false") do |pid, stdin, stdout, stderr|
puts "stdout: #{stdout}"
end
puts status
我想看一下,因为它将允许您获得stout/stderr和退出状态 另请参阅本页,其中还详细介绍了popen4的用法
status = Open4::popen4("false") do |pid, stdin, stdout, stderr|
puts "stdout: #{stdout}"
end
puts status
这里有一个方法可以解决这个问题
#!/usr/bin/env ruby
require 'open3'
Open3.popen3("ls -l") do |stdin, stdout, stderr, wait_thr|
puts stdout.read
puts wait_thr.value.exitstatus
end
# >> total 52
# >> -rw-r--r-- 1 arup users 0 Aug 5 09:32 a.rb
# >> drwxr-xr-x 2 arup users 4096 Jul 20 20:37 FSS
# >> drwxr-xr-x 2 arup users 4096 Jul 20 20:37 fss_dir
# >> -rw-r--r-- 1 arup users 42 Jul 19 01:36 out.txt
# .....
#...
# >> 0
Doco非常清楚这一点<代码>标准输出提供对象。所以,我们需要使用方法。而
等待\u thr.值给出了我们。现在,一旦我们有了那个对象,我们就可以使用同样的方法了。这里有一个方法来解决这个问题
#!/usr/bin/env ruby
require 'open3'
Open3.popen3("ls -l") do |stdin, stdout, stderr, wait_thr|
puts stdout.read
puts wait_thr.value.exitstatus
end
# >> total 52
# >> -rw-r--r-- 1 arup users 0 Aug 5 09:32 a.rb
# >> drwxr-xr-x 2 arup users 4096 Jul 20 20:37 FSS
# >> drwxr-xr-x 2 arup users 4096 Jul 20 20:37 fss_dir
# >> -rw-r--r-- 1 arup users 42 Jul 19 01:36 out.txt
# .....
#...
# >> 0
#my_prog.rb
puts 'hello'
exit 10
Doco非常清楚这一点<代码>标准输出
提供对象。所以,我们需要使用方法。而等待\u thr.值给出了我们。现在,一旦我们有了那个对象,我们就可以使用同样的方法
#my_prog.rb
puts 'hello'
exit 10
最合适的方法是阅读$?。exitstatus
:
a = `ls -l` # gets output
b = $?.exitstatus # gets exit code
测试:
有关处理退出状态的更多方法,请参阅。最合适的方法是读取$?。退出状态
:
a = `ls -l` # gets output
b = $?.exitstatus # gets exit code
测试:
有关处理退出状态的更多方法,请参阅
我希望exception作为类exception的实例能够
重新提起它,而不仅仅是一根绳子
您可以这样做:
#my_prog.rb
puts 'hello'
10/0
不幸的是,有几个异常的名称不以“Error”结尾——但是您可以修改代码来搜索错误消息中的特定名称
我希望exception作为类exception的实例能够
重新提起它,而不仅仅是一根绳子
您可以这样做:
#my_prog.rb
puts 'hello'
10/0
不幸的是,有几个例外的名称不以“Error”结尾,但您可以修改代码来搜索错误消息中的特定名称。为什么我要使用gem,Ruby中没有标准方法吗?我发布的第二个链接介绍了Ruby中的5种标准方法。第六种方法,使用gem,是唯一一种可以同时获得状态和输出的方法,我认为它做得很好。第六种方法,使用gem,是唯一一种可以同时获得状态和输出的方法…不正确。如其他答案所示,你是正确的。我自己也确实学到了一些东西!为什么我要使用gem,Ruby中没有标准方法吗?我发布的第二个链接描述了Ruby中的5种标准方法。第六种方法,使用gem,是唯一一种可以同时获得状态和输出的方法,我认为它做得很好。第六种方法,使用gem,是唯一一种可以同时获得状态和输出的方法…不正确。如其他答案所示,你是正确的。我自己也确实学到了一些东西!@halfelf的可能重复,是什么意思的重复?@halfelf的可能重复,是什么意思的重复?为什么不对多行块使用“do”?@AlexanderSupertramp复制粘贴..错误..:-)对不起,我如何从stderr检索错误(异常)?@AlexanderSupertramp没有理解你。您想要异常
类名吗?是stderr
将以字符串形式向您提供错误消息。我希望异常作为类异常的实例能够重新引发它,而不仅仅是字符串。为什么不对多行块使用“do”?@AlexanderSupertramp Copy paste..err..-)对不起,我如何从stderr检索错误(异常)?@AlexanderSupertramp没有理解你。您想要异常
类名吗?是stderr
将以字符串形式向您提供错误消息。我希望异常作为类异常的实例能够重新引发它,而不仅仅是字符串。很好+1.……如果您不喜欢perl类变量名(谁喜欢?!!),您可以这样写:需要“english”
和put$CHILD\u STATUS.exitstatus
Nice+1.……如果您不喜欢类似perl的变量名(谁喜欢?!!),您可以这样写:需要“english”
和放置$CHILD\u状态。exitstatus