相关疑难解决方法(0)

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

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

system("ls")
Run Code Online (Sandbox Code Playgroud)

ruby system call

303
推荐指数
13
解决办法
25万
查看次数

欺骗应用程序认为它的标准输出是一个终端,而不是管道

我正试图做相反的事情

检测stdin是终端还是管道?

我正在运行一个正在更改其输出格式的应用程序,因为它检测到stdout上的管道,我希望它认为它是一个交互式终端,以便在重定向时获得相同的输出.

我当时认为将它包装在expect脚本中或使用proc_open()PHP中的它会这样做,但事实并非如此.

有什么想法吗?

bash terminal stdin pipe

137
推荐指数
7
解决办法
5万
查看次数

ruby系统命令检查退出代码

我在ruby中有一堆系统调用,如下所示,我想同时检查它们的退出代码,以便在该命令失败时我的脚本退出.

system("VBoxManage createvm --name test1")
system("ruby test.rb")
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西

system("VBoxManage createvm --name test1", 0) < - 第二个参数检查退出代码并确认系统调用成功,如果没有,则会引发错误或执行某种操作.

这有可能吗?

我已经尝试过这方面的事情,但也没有用.

system("ruby test.rb")
system("echo $?")
Run Code Online (Sandbox Code Playgroud)

要么

`ruby test.rb`
exit_code = `echo $?`
if exit_code != 0
  raise 'Exit code is not zero'
end
Run Code Online (Sandbox Code Playgroud)

ruby command exit-code exit

102
推荐指数
6
解决办法
8万
查看次数

何时使用在Ruby中启动子进程的每种方法

1. ``Backtick

1. a)%x{}百分比X <Backtick的替代语法

  • 在parse.y中定义,请参阅讨论

2. system()

3. fork()

4. open()

4.A. IO.popen()<表现相同open()

4.B. open("|-")

  • 叉到管道

4.C. IO.popen("-")<表现相同open("|-")

5. Open3.popen3()

  • require 'open3'
  • stdlib Open3

6. PTY.spawn()

  • require 'pty'
  • stdlib PTY

7. Shell.transact()

  • require 'shell'
  • stdlib Shell

什么时候应该放弃一个更复杂的方法的可信赖的背叛?

编辑1. 非常感谢Avdi Grimm的帖子描述了每种方法的示例用法:#1(&gist); #2(&gist); #3.

他们是很好的资源来回答如何,但没有明确的组成来回答每个应该使用为什么,并因此恕我直言这个问题不完整的答案.

ruby performance standards subprocess coding-style

60
推荐指数
3
解决办法
8120
查看次数

隐藏系统命令导致ruby

在ruby中隐藏系统命令的结果有多容易?例如,我的一些脚本运行

system "curl ..." 
Run Code Online (Sandbox Code Playgroud)

我不希望看到下载的结果.

ruby command system

12
推荐指数
3
解决办法
8010
查看次数

“掏空”或“掏空”是什么意思?

在这些示例中,例如:

从bundle exec调用的命令中将shell打包

要么

封装到不属于您当前捆绑包的Ruby命令中,

http://bundler.io/man/bundle-exec.1.html

要么

我要在rake任务中使用heroku命令

https://github.com/sstephenson/rbenv/issues/400

ruby unix bundler

6
推荐指数
1
解决办法
1644
查看次数

Rspec:运行外部rails服务器

这个问题是关于从rspec环境启动外部项目的rails服务器.

有2个项目.

  • 第一个项目充当管理员后台,它是用户与网页交互的中央应用程序.我称之为BackOffice
  • 第二个项目是一个Json API服务器,它将通过json请求从Admin Back Office接收命令.我称之为ApiServer

我正在尝试测试这两个rails项目之间的API交互,我想设置rspec,这样我就可以在BackOffice项目中编写和维护我的spec文件.这些规范将启动ApiServer rails服务器,然后播放以执行测试.

我的问题是关于启动ApiServer rails服务器.在查看rails app初始化文件后,我假设我必须向"config/environment"添加一个require.


但是当我插入BackOffice/spec/spec_helper.rb时

require File.expand_path('../../../ApiServer/config/environment', __FILE__)
Run Code Online (Sandbox Code Playgroud)

我收到了错误

`initialize!': Application has been already initialized. (RuntimeError)
# Backtrace to the file:
# ApiServer/config/environment.rb
# Line:
# Rails.application.initialize!
Run Code Online (Sandbox Code Playgroud)

我还尝试在反引号中简单地调用以下内容

`cd /api/path; bundle exec rails s -p 3002` 
Run Code Online (Sandbox Code Playgroud)

但得到了同样的错误


然后我从Capybara源代码中获得灵感,并且需要"ApiServer/application",然后我能够创建一个ApiServer.new对象,但是一旦我调用initialize!它就会得到相同的消息.

任何帮助是极大的赞赏.干杯

rspec ruby-on-rails

5
推荐指数
1
解决办法
990
查看次数

需要为back-ticks命令设置环境var

如何将环境变量传递给我使用Kernel#systemet al 执行的shell命令?

说,我想跑

%x{git checkout -f}
Run Code Online (Sandbox Code Playgroud)

但是这个命令依赖于环境变量$GIT_WORK_TREE.我该怎么设置呢?

ruby shell scripting

4
推荐指数
1
解决办法
2046
查看次数

Bash to Ruby - 使用whois和grep命令获取列表

我很好奇是否有一种将bash命令转换为ruby脚本的简单方法.

如果在命令行中键入此内容,则会获得ip网络列表.

whois -h whois.radb.net -- '-i origin AS35995' | grep -Eo "([0-9.]+){4}/[0-9]+"
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以在Ruby中执行类似的操作,或者我是否必须手动编写代码?

对不起noob问题,并提前感谢您的帮助!

ruby ruby-on-rails

1
推荐指数
1
解决办法
64
查看次数

通过从VIM会话捕获bash脚本获取输入

我正在创建一个新的CLI应用程序,我想从用户那里获得一些敏感的输入.因为,这个输入可能非常具有描述性,而且信息有点敏感,我想允许用户从这个应用程序输入这样的命令:

app new entry
Run Code Online (Sandbox Code Playgroud)

在此之后,我想为用户提供一个VIM会话,他可以在其中编写这个描述性输入,当他退出此VIM会话时,我的脚本将捕获该输入并用于进一步处理.

有人可以告诉我一个方法(可能是一些隐藏的VIM功能 - 因为,我总是对它们感到惊讶)所以我可以这样做,而不创建任何临时文件?正如下面的评论中所解释的,我更喜欢一些内存文件,因为信息可能有点敏感,因此,我想首先通过我的脚本处理它,然后只将它写入磁盘加密的方式.

ruby vim

0
推荐指数
1
解决办法
371
查看次数

Ruby检查是否安装在if条件中

内容a.rb是:

if system("mount | grep /boot") != ""
  print "true"  # or do something
else 
  print "false" # or do something else 
end
Run Code Online (Sandbox Code Playgroud)

运行此代码不会打印"true"或"false",但会打印系统调用的输出.

]$ ruby a.rb 
/dev/sda1 on /boot type ext4 (rw)
Run Code Online (Sandbox Code Playgroud)

检查if条件的正确语法是什么?

ruby

0
推荐指数
1
解决办法
810
查看次数