相关疑难解决方法(0)

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

我正试图做相反的事情

检测stdin是终端还是管道?

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

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

有什么想法吗?

bash terminal stdin pipe

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

在Ruby脚本中运行命令行命令

有没有办法通过Ruby运行命令行命令?我正在尝试创建一个小的Ruby程序,它可以通过'screen','rcsz'等命令行程序拨出和接收/发送.

如果我可以将所有这些与Ruby(MySQL后端等)结合在一起,那将是很棒的.

ruby terminal scripting command-line command-prompt

89
推荐指数
3
解决办法
8万
查看次数

从Rakefile执行bash命令

我想bash从一个执行一些命令Rakefile.

我在我的尝试中尝试了以下内容 Rakefile

task :hello do
  %{echo "World!"}
end
Run Code Online (Sandbox Code Playgroud)

但在执行rake hello时没有输出?如何从Rakefile执行bash命令?

注意:这不是重复,因为它具体询问如何从Rakefile执行bash命令.

ruby bash rake

66
推荐指数
4
解决办法
4万
查看次数

何时使用在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
查看次数

如何将独立的Python脚本集成到Rails应用程序中?

我有一个程序,它有一个小的文件结构,然后运行使用

python do_work.py foo bar
Run Code Online (Sandbox Code Playgroud)

我希望我的Rails用户按下按钮并为他们发生这种情况,结果要么上传到某个地方,要么只是作为下载链接或类似的东西抛出 - 输出do_work.py(比方说,它result.txt)

我还想澄清一下,脚本会在文件系统上创建3个独立的文件,这些文件不是文本文件(这应该不重要,这里不是问题)

最好的方法是什么?可以rake运行exec Python吗?更重要的是,这在heroku上是可行的吗?

我在我的系统上安装了Python,但sockmonk提供的答案似乎不起作用 - 它返回nil.请注意,其他命令ls似乎有效.

这可能是权限问题吗?

def index
    value = %x( python --version )
    render :text => value
end
Run Code Online (Sandbox Code Playgroud)

顺便说一句,尝试这个irb:

%x(python)
Run Code Online (Sandbox Code Playgroud)

打开irb的Python终端INSIDE.然而,无论出于何种原因,它都不会占用.

ruby python rake ruby-on-rails heroku

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

如何在Rake任务中执行命令?

我在rails应用程序中有rake任务.我想在rake任务中运行命令行命令.我怎样才能做到这一点.我试过以下但失败了

desc "Sending the newsletter to all the users"
task :sending_mail do
  run "cd #{RAILS_ROOT} && ar_sendmail -o -t NewsLetters -v"
  system "cd #{RAILS_ROOT} && ar_sendmail -o -t NewsLetters -v &"
end
Run Code Online (Sandbox Code Playgroud)

上面的run命令抛出run方法undefined&System命令没有抛出任何错误但没有执行.

shell rake command-line ruby-on-rails rake-task

19
推荐指数
3
解决办法
3万
查看次数

从ruby调用python脚本

例如,我可以在PHP中使用Python脚本:

exec("python script.py params",$result);
Run Code Online (Sandbox Code Playgroud)

其中"script.py" - 脚本名称和变量$result保存输出数据.

我如何用Ruby制作它?我的意思是,从Ruby调用Python脚本.

ruby python

14
推荐指数
2
解决办法
1万
查看次数

外部命令如何将其输出和退出状态返回给Ruby?

这是关于ruby系统命令检查退出代码的后续问题.我想运行命令,以获取其输出以及退出代码.目前我在代码中使用的是:

rv = `#{cmd} 2>&1`
Run Code Online (Sandbox Code Playgroud)

但这只能捕获输出,并且

rv = system(cmd)
Run Code Online (Sandbox Code Playgroud)

仅捕获退出代码.如何实现两者?

ruby shell stdout exit-code

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

当shelled-out命令返回非零退出代码时,如何让Ruby脚本失败?

在Ruby脚本中,有多种方法可以调用系统命令/命令行

  1. 反引号: `command arg1 arg2`
  2. 分隔形式,例如%x(command arg1 arg2)(可用的其他分隔符)
  3. Kernel#system 方法: system('command arg1 arg2')
  4. Kernel#exec 方法: exec('command arg1 arg2')

如果我希望Ruby脚本在被调用的命令失败时(异常)失败(使用非零退出代码),我可以检查$?前两个变量的特殊变量中的退出代码:

`command arg1 arg2`
fail unless $? == 0
Run Code Online (Sandbox Code Playgroud)

要么

%x,command arg1 arg2,
fail unless $? == 0
Run Code Online (Sandbox Code Playgroud)

如果我对命令的标准输出转到Ruby脚本的标准输出(我是),我可以使用变量3并检查其返回值:

unless system('command arg1 arg2')
  fail
end
Run Code Online (Sandbox Code Playgroud)

如果我不关心拯救异常的能力,也不关心无法解决的异常的堆栈跟踪打印行为,我当然可以使用exit(1)或者在前两个变体exit($?)中代替fail.

如果进一步执行命令是Ruby脚本应该做的最后一件事,即使命令成功(退出代码0),我也可以使用第四个变体:

exec('command arg1 arg2')
Run Code Online (Sandbox Code Playgroud)

这将使用通过调用命令创建的新进程替换Ruby进程,但Ruby脚本的调用者的效果将是相同的:如果被调用的命令导致非零退出,他会看到非零退出代码码.

我非常喜欢第四个变体的简洁性,但是如果执行命令不是最后一件事,如果成功,我很遗憾不会使用它.相比之下,其他变体的条件failexit调用看起来非常不洁净,并且在我的一个用例中,往往违反单一抽象级别和单一责任原则.

我当然可以轻松地为前三种方法中的任何一种编写一个包装函数,使它们的用法看起来简洁,但由于这看起来像是一个基本的操作方法,我想知道Ruby是否已经内置了类似的内容 ......是一个我可以使用的实用程序函数,而不是我自己的包装器,或者一种机制,当命令失败时,它会改变一个或多个命令调用方法的行为,导致错误或非零退出,类似于选择set -e.

ruby command-line-interface

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

Rails:可以检查字符串是否是二进制文件?

在特定的Rails应用程序中,我将LDAP中的二进制数据提取到变量中进行处理.有没有办法检查变量是否包含二进制数据?如果它不是二进制的,我不想继续处理这个变量.我希望用is_a?...

实际上,我从LDAP中提取的二进制数据是一张照片.那么也许有更好的方法来确保变量包含二进制JPEG数据?此检查的结果将决定是继续处理JPEG数据,还是从磁盘渲染默认JPEG.

ruby ruby-on-rails

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

Ruby:PIpe URL内容到bash命令

编辑:这只是标记为调用Bash命令的问题的副本.我敢说,熟悉编程的人应该意识到"调用Bash命令"与通过HTTP抽取资源并将其输出发送到另一个程序有很大的不同.

有没有人有示例代码显示如何在Ruby中实现这种事情:

curl http://stackoverflow.com | wc
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用system,但理想情况下要保持使用纯粹的Ruby IO.pipe或诸如此类的东西.

ruby pipe

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

从rails app控制器中调用ruby脚本

我是rails的新手,我有一个脚本,我从控制台运行就像这样

   $ ruby axml2xml.rb ExamPaper.apk
Run Code Online (Sandbox Code Playgroud)

现在,如何在我的控制器方法中调用此脚本并传递相同的参数ExamPaper.apk

我试过,require 'axml2xml.rb'但指出这行代码有一些错误Zip::ZipFile.foreach(ARGV[0]) do |f|.所以基本上,我如何axml2xml.rb 'ExamPaper.apk'在我的控制器中制作一些东西?

ruby ruby-on-rails ruby-on-rails-3

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

在ruby中运行linux命令

我正在尝试做以下事情..

   if "ps | grep -e file" then
      true;
   else
      false;
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能使if语句中的字符串执行列出的linux命令?

ruby linux

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