我正试图做相反的事情
我正在运行一个正在更改其输出格式的应用程序,因为它检测到stdout上的管道,我希望它认为它是一个交互式终端,以便在重定向时获得相同的输出.
我当时认为将它包装在expect脚本中或使用proc_open()PHP中的它会这样做,但事实并非如此.
有什么想法吗?
有没有办法通过Ruby运行命令行命令?我正在尝试创建一个小的Ruby程序,它可以通过'screen','rcsz'等命令行程序拨出和接收/发送.
如果我可以将所有这些与Ruby(MySQL后端等)结合在一起,那将是很棒的.
我想bash从一个执行一些命令Rakefile.
我在我的尝试中尝试了以下内容 Rakefile
task :hello do
%{echo "World!"}
end
Run Code Online (Sandbox Code Playgroud)
但在执行rake hello时没有输出?如何从Rakefile执行bash命令?
注意:这不是重复,因为它具体询问如何从Rakefile执行bash命令.
``Backtick%x{}百分比X <Backtick的替代语法system()fork()open()IO.popen()<表现相同open()open("|-")IO.popen("-")<表现相同open("|-")Open3.popen3()require 'open3'PTY.spawn()require 'pty'Shell.transact()require 'shell'编辑1. 非常感谢Avdi Grimm的帖子描述了每种方法的示例用法:#1(&gist); #2(&gist); #3.
他们是很好的资源来回答如何,但没有明确的组成来回答每个应该使用或为什么,并因此恕我直言这个问题不完整的答案.
我有一个程序,它有一个小的文件结构,然后运行使用
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.然而,无论出于何种原因,它都不会占用.
我在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命令没有抛出任何错误但没有执行.
例如,我可以在PHP中使用Python脚本:
exec("python script.py params",$result);
Run Code Online (Sandbox Code Playgroud)
其中"script.py" - 脚本名称和变量$result保存输出数据.
我如何用Ruby制作它?我的意思是,从Ruby调用Python脚本.
这是关于ruby系统命令检查退出代码的后续问题.我想运行命令,以获取其输出以及退出代码.目前我在代码中使用的是:
rv = `#{cmd} 2>&1`
Run Code Online (Sandbox Code Playgroud)
但这只能捕获输出,并且
rv = system(cmd)
Run Code Online (Sandbox Code Playgroud)
仅捕获退出代码.如何实现两者?
在Ruby脚本中,有多种方法可以调用系统命令/命令行
`command arg1 arg2`%x(command arg1 arg2)(可用的其他分隔符)Kernel#system 方法: system('command arg1 arg2')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脚本的调用者的效果将是相同的:如果被调用的命令导致非零退出,他会看到非零退出代码码.
我非常喜欢第四个变体的简洁性,但是如果执行命令不是最后一件事,如果成功,我很遗憾不会使用它.相比之下,其他变体的条件fail或exit调用看起来非常不洁净,并且在我的一个用例中,往往违反单一抽象级别和单一责任原则.
我当然可以轻松地为前三种方法中的任何一种编写一个包装函数,使它们的用法看起来简洁,但由于这看起来像是一个基本的操作方法,我想知道Ruby是否已经内置了类似的内容 ......是一个我可以使用的实用程序函数,而不是我自己的包装器,或者一种机制,当命令失败时,它会改变一个或多个命令调用方法的行为,导致错误或非零退出,类似于sh和bash的选择set -e.
在特定的Rails应用程序中,我将LDAP中的二进制数据提取到变量中进行处理.有没有办法检查变量是否包含二进制数据?如果它不是二进制的,我不想继续处理这个变量.我希望用is_a?...
实际上,我从LDAP中提取的二进制数据是一张照片.那么也许有更好的方法来确保变量包含二进制JPEG数据?此检查的结果将决定是继续处理JPEG数据,还是从磁盘渲染默认JPEG.
编辑:这只是标记为调用Bash命令的问题的副本.我敢说,熟悉编程的人应该意识到"调用Bash命令"与通过HTTP抽取资源并将其输出发送到另一个程序有很大的不同.
有没有人有示例代码显示如何在Ruby中实现这种事情:
curl http://stackoverflow.com | wc
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用system,但理想情况下要保持使用纯粹的Ruby IO.pipe或诸如此类的东西.
我是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'在我的控制器中制作一些东西?
我正在尝试做以下事情..
if "ps | grep -e file" then
true;
else
false;
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能使if语句中的字符串执行列出的linux命令?
ruby ×11
rake ×3
bash ×2
command-line ×2
pipe ×2
python ×2
shell ×2
terminal ×2
coding-style ×1
exit-code ×1
heroku ×1
linux ×1
performance ×1
rake-task ×1
scripting ×1
standards ×1
stdin ×1
stdout ×1
subprocess ×1