首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Ruby中获取system()调用的输出

在Ruby中获取system()调用的输出
EN

Stack Overflow用户
提问于 2009-03-27 23:12:54
回答 13查看 275.9K关注 0票数 329

如果我在Ruby语言中使用Kernel#system调用一个命令,我如何获得它的输出?

代码语言:javascript
复制
system("ls")
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-10-14 00:06:16

我想对chaos's answer做一点扩展和澄清。

如果您用反引号将命令括起来,那么您根本不需要(显式地)调用system()。反引号执行命令并以字符串的形式返回输出。然后,您可以将该值赋给变量,如下所示:

代码语言:javascript
复制
output = `ls`
p output

代码语言:javascript
复制
printf output # escapes newline chars
票数 372
EN

Stack Overflow用户

发布于 2011-05-12 05:25:34

请注意,将包含用户提供的值的字符串传递给system%x[]等的所有解决方案都是不安全的!不安全实际上意味着:用户可能会触发代码在上下文中运行,并具有程序的所有权限。

据我所知,只有systemOpen3.popen3在Ruby1.8中提供了一个安全/转义的变体。在Ruby1.9中,IO::popen也接受数组。

只需将每个选项和参数作为数组传递给其中一个调用。

如果您不仅需要退出状态,而且还需要结果,那么您可能希望使用Open3.popen3

代码语言:javascript
复制
require 'open3'
stdin, stdout, stderr, wait_thr = Open3.popen3('usermod', '-p', @options['shadow'], @options['username'])
stdout.gets(nil)
stdout.close
stderr.gets(nil)
stderr.close
exit_code = wait_thr.value

请注意,块形式将自动关闭stdin、stdout和stderr-否则它们必须为closed explicitly

更多信息请点击此处:Forming sanitary shell commands or system calls in Ruby

票数 249
EN

Stack Overflow用户

发布于 2010-10-17 08:10:40

仅供记录,如果您想要(输出和操作结果),您可以这样做:

代码语言:javascript
复制
output=`ls no_existing_file` ;  result=$?.success?
票数 176
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/690151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档