我有一个简单的Ruby脚本,看起来像这样require'csv'whileline=STDIN.getsarray=CSV.parse_line(line)putsarray[2]end但是当我尝试在这样的Unix管道中使用此脚本时,我得到10行输出,然后是一个错误:rubylib/myscript.rb(Errno::EPIPE)有没有一种方法可以以防止引发破损管道异常的方式编写Ruby脚本? 最佳答案 head在读取所有需要的数据后关闭标准输出流。您应该处理异常并停止写入标准输出。一旦标准输出关闭,以下代码将中止循环:while
我有一个使用简单形式的普通形式。现在我想添加一个在模型中没有任何对应字段的输入,它将由Controller处理。我试过了但这给出了一个Methodnotfound:attr_not_in_obj错误。我显然可以使用标准的Rails帮助程序,但是我会错过输入周围的所有简单格式HTML,并且复制似乎不太正确。简而言之:我正在寻找类似rails标签助手的简单版本,与模型没有任何联系。如何添加与模型属性不对应的输入? 最佳答案 为什么不添加:attr_accessor:attr您模型的类定义?这样你的代码:应该可以。或如果此解决方案不合适,
我正在使用daemonsgem在Ruby中创建一个守护进程。我想将守护进程的输出添加到日志文件中。我想知道将puts从控制台重定向到日志文件的最简单方法是什么。 最佳答案 如果您需要同时捕获STDERR和STDOUT并且不想求助于日志记录:$stdout.reopen("my.log","w")$stdout.sync=true$stderr.reopen($stdout)恢复:$stdout=STDOUT 关于ruby-将"puts"命令输出重定向到日志文件,我们在StackOverf
我正在使用sh运行命令,需要读取该命令的输出。例如sh"whoami"但是sh似乎只返回true而不是包含whoami命令输出的字符串。有谁知道解决方案吗? 最佳答案 有几种方式:output=`whoami`#oroutput=%x[whoami]#orusing'system'butincaseoferrorsit'sgonnareturnfalseoutput=system"whoami" 关于ruby-使用rakesh时如何检索命令的输出?,我们在StackOverflow上找到
假设我正在运行IRB并在控制台中输入:deffull_name(first,last)puts"Yourfullnameis:#{first,'',last}"end比如说,我想编辑它以包含参数middle,我该如何恢复相同的方法并编辑参数列表并编辑puts无需重新输入整个方法的声明?附言我知道这个例子很简单,我可以很容易地重新输入方法,但我正在试验更大的方法,为了简洁起见,我使用这个简单的方法。谢谢。 最佳答案 你不能。除了重新输入/重新粘贴,或按↑获取所有先前的语句,但对于较长的方法,这可能会非常困惑。为什么不在编辑器中键入您的
我正在编写如下一些单元测试:defexecuting_a_signala_method(a_signal.new,a_model,a_helper);assert_equal(new_state,a_model.state)end测试工作正常,但是在执行逻辑的断言之前运行的方法主要通过puts将各种消息打印到控制台。是否有一种快速的(也许是内置的)方法来抑制向控制台的输出?我只对方法对模型对象的最终效果感兴趣,并且为了基本上保持控制台干净,我希望找到一种方法来简单地阻止所有输出到控制台而无需重写或注释掉那些puts语句仅用于我的测试。这绝对不是一个关键问题,但非常希望听到关于它的任何想
我的~/.inputrc中有这些行:setediting-modevisetkeymapvi这允许我在每个使用GNUreadlines进行文本输入的程序中使用vi键绑定(bind)。示例:python、irb、sftp、bash、sqlite3等.它使使用命令行变得轻而易举。Matlab不使用readlines,但vi键绑定(bind)在调试或交互工作时会惊人。有现成的解决方案吗?我倾向于在命令行中使用matlab-nosplash-nodesktop,这让我开始思考:是否可以编写一个包装器,确实使用readlines并通过matlab的输入?(如果我必须实现它,我可能更愿意在Ruby
我正在使用Ruby的内置CSV生成一些CSV输出。一切正常,但客户希望输出中的名称字段包含双引号,以便输出看起来像输入文件。例如,输入看起来像这样:1,1.1.1.1,"FirstnameLastname",more,fields2,2.2.2.2,"FirstnameLastname,Jr.",more,fieldsCSV的正确输出如下所示:1,1.1.1.1,FirstnameLastname,more,fields2,2.2.2.2,"FirstnameLastname,Jr.",more,fields我知道CSV的做法是正确的,因为它没有双引号第三个字段,只是因为它嵌入了空格,
我需要检查Ruby脚本中是否存在STDIN输入,就像mysql命令一样。如果没有任何内容指向STDIN,则脚本不应尝试读取STDIN。如何以跨平台的方式做到这一点? 最佳答案 这是在Linux中经常做的事情:#!/usr/bin/envrubystr=(STDIN.tty?)?'notreadingfromstdin':$stdin.readputsstr>>$rubytest.rb>>notreadingfromstdin>>$echo"readingfromstdin"|rubytest.rb>>readingfromstdin
我正在尝试使用“puts”来测试托管在Heroku上的Sinatra应用程序的一些内容。有趣的是,输出似乎排队并且仅在重新启动Herokudyno时显示。我尝试过使用“Thin”和“Webrick”,但遇到了同样的问题。有什么想法吗? 最佳答案 正如您在herokudocs上看到的那样:将此添加到您的config.ru:$stdout.sync=true不要忘记stdout之前的$否则它不会工作。 关于ruby-"puts"输出未显示在Sinatra应用程序的Heroku日志中,我们在S