问题标签 [popen3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - 从 ruby 运行 bash 脚本不会产生正确的 pid
我正在开发一个 ruby 框架来运行不同的作业,我需要做的一件事是知道这些作业何时结束,以便使用它们的输出并组织所有内容。我一直在毫无问题地使用它,但是一些同事开始在不同的系统中使用它,并且发生了一些非常奇怪的事情。我所做的是使用运行命令
后来我检查工作是否像这样结束:
它在我正在运行的系统(Scientifi linux 6)中完美运行,但是当我的一个朋友开始在 Ubuntu 14.04 上运行(使用 ruby 1.9.3p484)并且命令是命令的串联,例如cmd1 && cmd2 && cmd3
每个命令同时运行由系统,不是一个接一个,返回的pidt.pid
既不是正在运行的不同进程的pid。
我修改了代码,而不是运行 cammands 的串联,而是创建了一个脚本,其中包含从 popen3 调用的命令中的所有命令,Open3.popen3("./script.sh")
但行为是相同的......所有命令同时运行并且 pid ruby 知道不是任何进程 pid...
我不确定这是否与 ruby 相关,但由于script.sh
手动运行它的行为符合预期,一个接一个地运行一个命令,似乎 ruby 没有相应地启动进程,或者系统没有按应有的方式读取进程。你知道可能会发生什么吗?
非常感谢!
编辑:正在运行的命令如下所示
./myFit.exe h vlq.config &> output_h.txt && ./myFit.exe d vlq.config &> output_d.txt && ./myFit.exe p vlq.config &> output_p.txt
这个命令,如果手动运行而不是在 ruby 脚本内运行完美,正是这个命令。从 ruby 脚本运行时,它会同时运行所有 myFit.exe 执行(但我希望它们与 h && 一起运行,因为如果前面的工作正常,我希望它们运行)。Myfit.exe 是一个适合的工具,不是系统命令。同样,如果手动运行此命令,则运行完美。
ruby - Open3.capture3 挂起,没有任何输出
我有一些像这样的代码在撬:
它在命令行中使用多链。虽然上面的效果很好,但下一部分不起作用:
我等了很长时间,但它永远不会返回任何东西,直到我用 ctrl-C 打断它。
multichaind -daemon
不等待任何其他输入。
当我从 bash 运行 multichaind 时,我得到下一个输出:
并退出。有谁知道为什么 capture3 挂起?谢谢,
编辑:铁皮人告诉我这个问题是关于不关闭标准输入,但我相信会Open3.capture3
自动关闭标准输入。在我完成之后Open3.popen3
,问题出在 STDOUT 上。有人能告诉我更多吗?谢谢
python - Python 代码到 Perl
我有一段python代码,我需要将它转换为perl,但不幸的是我不擅长perl,如果问题很简单,很抱歉。我想检查 STDOUT 和 STDERR 的特定单词。这是python代码:
我阅读了一些文档,open3 函数可能在这里工作,但对于 p.poll() 部分,我不确定该使用什么。
ruby - 如何在 Ruby 中使用 Open3.popen2e 接受输入
我用 Ruby 制作了一个包装器,它做了很多事情,设置环境变量,然后使用 Open3 库执行外部程序,将参数(和 ENV)传递给外部进程。
一切运行良好,我从外部进程获得实时输出。但是,有时外部程序会要求输入。我现有的代码不适应这一点,提供输入似乎不起作用。
这是运行外部程序的函数options
。
我怎样才能让它接受标准输入?
ruby - Open3.popen3 在 Windows 上返回错误错误 Errno::ENOENT
我在 test.rb 中有以下代码:
bar.exe
是我创建的一个控制台应用程序,位于C:\Program Files\foo\
. 当我运行时bar.exe
:
- 它输出
"Hello world!"
- 使用任何参数,例如
bar.exe /blah
,它会输出帮助消息。
当我运行时,ruby test.rb
我收到此错误:
如果我将代码更改为调用popen3
:
我没有收到Errno::ENOENT
错误,而是收到帮助消息,但我想要"Hello World"
输出。
我搜索了一个解决方案,但没有任何效果,包括“为什么 Open3.popen3 在可执行文件丢失时返回错误错误? ”的答案。
为什么我会收到此错误,我该如何解决?
ruby - Ruby - Open3 popen3 函数已清理
想使用 Open3 的 popen3 函数在 ruby 上运行系统命令。它会是这样的:
由于文件名将由参数传递,我想对其进行清理。如果运行,例如:
代码工作正常,但是当我尝试分离参数时(因为函数表明它会被转义),类似于:
它给了我错误:没有这样的文件或目录 - pdf2htmlEX --zoom 1.3
有谁知道我如何解决它?谢谢!
ruby-on-rails - 如何配置 rubymine 以与 open3 一起使用?
问题
我在 rails 应用程序中使用xray-rails gem,并希望它在我在浏览器中单击它时将 rubymine 打开到正确的文件。目前还不清楚如何配置它。xray-rails gem 使用 open3 在编辑器中打开文件。
cucumber - 如何从 Cucumber::CLI::Main.execute 获取输出(STDOUT)到变量中
在 Jruby 9.1.7.0 中运行黄瓜脚本。输出到 STDOUT。我怎样才能把它保存到局部变量中?
perl - Perl:让open3继承STDIN、STDOUT、STDERR
这打印 1..10 两次:
我想使用 IPC::Open3 做同样的事情,但我无法让它工作:
ruby - ruby open3 stdout和stdin如何交互
sum.rb
很简单。您输入两个数字,它会返回总和。
robot.rb
用来Open3.popen3
交互sum.rb
。这是代码:
robot.rb
未能运行。似乎它卡在了sum.rb
's gets.chomp
。
后来我发现我必须写如下才能使它工作。您需要事先以正确的顺序输入输入。
让我感到困惑的是:
robot_2.rb
不像与 shell 交互,它更像是提供 shell 需要的东西,因为我只知道。如果一个程序需要很多输入而我们无法预测顺序怎么办?我发现如果
STDOUT.flush
在每个puts
in之后添加sum.rb
,robot.rb
可以运行。但实际上我们不能相信sum.rb
作者可以添加STDOUT.flush
,对吗?
谢谢你的时间!