问题标签 [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.

0 投票
2 回答
1710 浏览

ruby - 模拟popen3块形式红宝石

我正在使用 rspec 在 Ruby 中开发一些测试用例。

我正在尝试模拟 popen3 函数。

但是,在仍然保持阻塞形式的同时,我无法捕获预期的输出信息:

为了模拟该功能,我正在执行以下操作:

模拟该函数不会输入“do”代码,我只剩下一个空数据结构。

我想知道我怎样才能正确地做到这一点?

谢谢!

0 投票
1 回答
4733 浏览

ruby - 在 ruby​​ 中杀死一个名为 using open3 的进程

我正在使用命令行程序,它的工作方式如下所述:

如果“长文本”是使用“app”需要的参数写入的,那么它将用结果填充一个文本文件。如果没有,它将连续用点填充文本文件(为了避免这种情况,我无法处理或修改“app”的代码)。

在 ruby​​ 脚本中有这样一行:

现在,如果文本写得好,就不会有问题,我会得到一个前面提到的输出文件。当文本写得不好时,问题就来了。接下来发生的是我的 ruby​​ 脚本挂起,我不知道如何杀死它。

我找到了 Open3并且我使用了这样的方法:

当我做:

它也挂起,并且:

我怎样才能避免这些问题?是不是没有认识到“应用程序”失败了?

0 投票
2 回答
1118 浏览

ruby - Ruby - Open3 未完成子进程

我在用着:

我有一个包含程序使用的命令的文件,我正在以这种方式使用它

File.txt有一些命令,所以program.exe将执行以下操作:

使用 powershell 此命令可以正常工作并且符合预期。

现在我在一个文件(app.rb)中有这个:

现在,当通过访问来使用它时http://localhost/processOpen3可以通过这样做来工作(我不是 100% 确定,但在尝试了几次之后,我认为这是唯一的选择)

  • 读取命令并执行它们(这没关系)

  • 尝试使用 ODBC 方法从 DB 读取(这是我的问题。我需要从其中接收一些输出,Open3以便可以在浏览器中显示它,但我猜当它尝试读取它时会启动另一个Open3不知道的进程,所以Open3 继续并完成而不等待它)

  • 出口

出口

我发现了以下内容:

  • 使用Thread.join(在这种情况下,w.join)为了等待进程完成,但它不起作用
  • Open4似乎可以处理子进程,但在 Windows 上不起作用
  • Process.wait(pid),在这种情况下pid = w.pid,但也不起作用
  • Timeout.timeout(n),这里的问题是我不确定需要多长时间。

有没有办法处理这个?(等待Open3子进程,所以我得到正确的输出)。

0 投票
1 回答
8613 浏览

python - 使用python执行shell邮件命令

我已使用以下代码发送一封电子邮件,正如其中一篇关于类似主题的帖子所建议的那样。但是邮件还没有发出。有什么建议么?

0 投票
2 回答
1334 浏览

ruby - Runy Open3.popen3 从命令行向子进程输入输入

目标:我正在用 ruby​​ 编写一个工作流命令行程序,该程序在 UNIX shell 上按顺序执行其他程序,其中一些程序需要用户输入。

问题:虽然我可以成功地处理stdoutstderr感谢Nick Charlton的这篇有用的博客文章,但是我仍然坚持捕获用户输入并通过命令行将其传递到子进程中。代码如下:

方法

调用方法

此示例调用 shell 命令,该命令units提示用户输入测量单位,然后提示输入要转换的单位。这就是它在外壳中的样子

当我从我的程序中运行它时,我希望能够以完全相同的方式与之交互。

注意:以这种方式调用该run方法允许用户能够解析输出、控制流程并添加自定义日志记录。

根据我收集到的关于 STDIN 的信息,下面的代码片段与我对如何处理 STDIN 的理解一样接近,但我的知识显然存在一些差距,因为我仍然不确定如何将其集成到我run上面的方法中,并且将输入传递给子进程。

摘要:我希望了解如何通过该Open3.popen3方法处理来自命令行的用户输入,以便我可以允许用户将数据输入到从我的程序调用的各种子命令序列中。

0 投票
1 回答
216 浏览

ruby - 如何避免在这段代码中连续实例化 Ruby 线程对象?

到目前为止,我从未使用过 Thread,但我认为在这种情况下我必须依赖它。我想分别处理 cURL 命令行的标准输出和标准错误,因为我想将进度指示器(写入标准错误)中的回车换行:

我的问题是如何避免在处理标准输出(stdout.each_char)时在每个循环周期创建一个新的线程实例?我认为这很耗时,我想实例化一次,然后使用它的方法,如停止和运行等。

0 投票
2 回答
1724 浏览

ruby - 我认为 Ruby UTF-16 编码

我有一个在 Windows 上运行的 Ruby 程序,它使用 Open3 调用一个 shell 命令(已知输出 UTF-16):

如果对 UTF_16LE 的 force_encoding 不起作用并引发异常,我只需保存字节,将其编码为 JSON 字符串并将其编码为 UTF_8。

好吧....抛出了异常,我在救援子句中捕获了输出字节数组。它看起来像这样:

如何将其转换回某种格式的文本。例如,如果我这样做:

有没有办法以编程方式将 [100, 111, 103] 转换为“狗”或 [224, 164, 149, 224, 165, 129, 224, 164, 164, 224, 165, 141, 224, 164, 176, 224, 164, 190] 回到“कुत्रा”?有没有办法弄清楚我的输出字节数组是什么意思?

- - - - - - - - - - - - - 更新 - - - - - - - - - - - - ---

我挖了一点,但花了一段时间,因为“解码”不是一件事。但是,我对变量message中保存的数组执行了以下操作:

所以我的问题解决了,因为错误消息不在 UTF-16LE 中。

但是,当我这样做时,我得到了以下结果:

如何将这个看起来很奇怪的字符串或字节序列转换为更有意义的 "कुत्रा" ?

0 投票
1 回答
58 浏览

ruby-on-rails - 如何在 Ruby 中尽可能快地执行子进程?

我们有一个 Rails 应用程序,它与 iOS 和 Web 客户端交互。目前,我们正在使用 Open3 从 Rails 控制器生成子进程,以检索数据并将数据发送到聊天服务器,该服务器使用 MongoDB 运行 node.js。然而,在生产几天后,我们发现子进程使我们的 Rails 应用程序非常慢,并且 CPU 使用率增加了很多。

我们知道长期的解决方案是使用 REST API 框架(例如 Express)来包装我们的聊天服务器。但在短期内,我们希望快速解决如何使我们的子流程执行得更快(生成、执行等)。

有任何想法吗?

0 投票
2 回答
1468 浏览

ruby - 通过 ruby​​ 运行 cmd 命令

我正在编写一个程序来执行另一个用 c 编写的程序,这是我的第一次尝试

实际输出:

所需的输出:

如果您知道更好的方法,请告诉我,我是 ruby​​ 新手。

0 投票
1 回答
90 浏览

ruby - 模拟命令提示符命令

用 open3 回答 ruby​​ 中的 cli 提示? ”可能是重复的问题,但它没有答案。

我需要编写一个程序来编译和执行 C 程序,提供输入并返回输出。到目前为止,我想出了这个:

对于单输入:

输出是:

对于两个或更多输入:

输出是:

问题是,我没有取回我输入的输入。

有没有办法可以纠正它,或者可能有更好的方法来做到这一点?