草庐IT

Ruby 调试器在 STDIN 上失败。获取用户输入

我相信您可以轻松重现该问题。只需使用一个新的RubyMine(7.1)—Mac或Windows版本,Ruby2.2,创建简单的脚本:puts"Hi,i'mgonnabreakyourdebugger:)"user_input=getsputs"Hereshouldbebreakpoint"将断点放在第3行并运行调试session(RubyMine使用ruby-debug-idegem)。当您在RubyMine控制台窗口中键入内容以便脚本在gets中读取时—程序不会吃掉您的输入说:Couldnotexecutestatement:currentstackframeisunavailabl

ruby - 在 Ruby 中测试标准输入

我目前正在尝试测试一种基本方法,该方法从用户那里接收一些输入(gets)并将其输出(puts)。经过一番研究后,我发现了一种测试标准输出流的好方法,如下所示:defcapture_standard_output(&block)original_stream=$stdout$stdout=mock=StringIO.newyieldmock.string.chompensure$stdout=original_streamend我正在测试的方法是下面的方法,输出和输入指的是我在开始时初始化的ivars,并指向等效的$stdout和$stdin:defask_for_markouput.p

ruby - 如何立即打印标准输出?

如何立即输出stdout?stdout将在所有输入完成后打印。require'open3'defrun(cmd)Open3.popen3(cmd)do|stdin,stdout,stderr,thread|Thread.newdostdout.each{|l|putsl}endThread.newdowhilethread.alive?stdin.puts$stdin.getsendendthread.joinendendrun("rubyfile_to_test.rb")file_to_test.rb:puts"please,enters"puts"please,enterq"s=g

ruby - 如何在命令行上获取 ruby​​ -e 的管道输入?

我正在尝试弄清楚如何在bash控制台上编写一行代码并通过管道传输到ruby​​,但我不知道如何获取输入。这不起作用:echo"MyString"|ruby-e"#{STDIN.read.first.downcase}"如何在ruby​​中获取管道输入? 最佳答案 Ruby将您的行视为注释,因为它以#开头。这会起作用:echo"MyString"|ruby-e"putsgets.downcase"输出:mystring我用过Kernel#gets而不是STDIN.gets:Returns(andassignsto$_)thenextl

ruby - 如何检查 Ruby 脚本中的 STDIN 输入?

我需要检查Ruby脚本中是否存在STDIN输入,就像mysql命令一样。如果没有任何内容指向STDIN,则脚本不应尝试读取STDIN。如何以跨平台的方式做到这一点? 最佳答案 这是在Linux中经常做的事情:#!/usr/bin/envrubystr=(STDIN.tty?)?'notreadingfromstdin':$stdin.readputsstr>>$rubytest.rb>>notreadingfromstdin>>$echo"readingfromstdin"|rubytest.rb>>readingfromstdin

ruby - Ruby 中的 STDIN 和 $stdin 有什么区别?

Ruby有两种引用标准输入的方法:STDIN常量和$stdin全局变量。除了我可以将不同的IO对象分配给$stdin因为它不是常量(例如,在我的child中fork重定向IO之前)之外,还有什么STDIN和$stdin的区别?我什么时候应该在我的代码中使用它们?如果我重新分配$stdin,它会影响STDIN吗?这是否也适用于STDOUT/$stdout和STDER/$stderr? 最佳答案 如果$stdin重新分配,STDIN不受影响。同样$stdinSTDIN时不受影响被重新分配(这是完全可能的(尽管毫无意义),但会产生警告)。

ruby - gets.chomp() 与 STDIN.gets.chomp() 之间有什么区别?

它们是相同的,还是这两个命令之间存在细微差别? 最佳答案 gets将使用Kernel#gets,它首先尝试读取通过ARGV传入的文件的内容。如果ARGV中没有文件,它将使用标准输入代替(此时它与STDIN.gets相同。注意:正如echristopherson指出的那样,Kernel#gets实际上会退回到$stdin,而不是STDIN。但是,除非您将$stdin分配给不同的输入流,否则默认情况下它将与STDIN相同。http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-ge

ruby - 在 Ruby 中连续读取外部进程的 STDOUT

我想通过ruby​​脚本从命令行运行blender,然后它将逐行处理blender给出的输出以更新GUI中的进度条。Blender是我需要读取其标准输出的外部进程并不重要。当blender进程仍在运行时,我似乎无法捕捉到blender通常打印到shell的进度消息,我已经尝试了几种方法。我似乎总是在blender退出后访问blender的标准输出,而不是在它仍在运行时。这是一个失败尝试的例子。它确实获取并打印了blender输出的前25行,但仅在blender进程退出后:blender=nilt=Thread.newdoblender=open"|blender-bmball.blen

ruby - Ruby 中 STDIN 的最佳实践?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭2年前。Improvethisquestion我想用Ruby处理命令行输入:>catinput.txt|myprog.rb>myprog.rbmyprog.rbarg1arg2arg3...最好的方法是什么?特别是我想处理空白的STDIN,我希望有一个优雅的解决方案。#!/usr/bin/envrubySTDIN.read.split("\n").eachdo|a|putsaendARGV.eachdo|b|putsbend

javascript - phantomjs 标准输入的事件监听器

是否可以为phantomjs的system.stdin事件设置事件监听?示例,其中phantomjs可以从stdin读取但在等待输入时停止一切:varsystem=require('system');system.stdout.writeLine('waitingforuserinput...');varinput=system.stdin.readLine();//anythingdownherewon'texecuteuntilinputhasbeenreceived理想的解决方案就像nodejs的process.stdin.on()phantomjs似乎没有提供任何方法来做到这一