问题标签 [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 投票
0 回答
190 浏览

ruby - 使用 Open3 从 Ruby 中的可执行文件中检索退出状态值

发射

就像一个魅力,但是当我尝试使用

stdout, status = Open3.capture2("../src/bin tests/test01.txt")

用他的参数路径启动一个可执行文件bin(它在我的命令行中工作,我检查了echo $?),它似乎进入了一个无限循环。我尝试了 capture3 和 popen3,同样的事情。

知道什么可能是错的吗?

0 投票
1 回答
56 浏览

ruby - 为什么 xelatex 不想被 popen3 以可变参数形式调用?

拿这个最小的 LaTeX 文档:

而这个 Ruby (2.5.1) 脚本:

运行脚本,我们得到:

这是令人惊讶的。不仅因为文件那里,而且因为两者

  • Open3.popen3('xelatex -interaction=nonstopmode "minimal.tex"') do ...
  • Open3.popen3('lualatex', '-interaction=nonstopmode', '"minimal.tex"') do ...

工作就好了!

xelatex和的组合有什么特别之处popen3

0 投票
2 回答
110 浏览

ruby - 如何从ruby的shell脚本调用函数

如何从 ruby​​ 调用 shell 脚本中的函数(最好使用 open3)

不工作的 Ruby 脚本——

0 投票
1 回答
187 浏览

ruby-on-rails - 在另一个项目中执行 rake 任务

在同一台机器上,我有两个 rails 项目/服务器。

我需要从一台服务器执行另一个项目的 rake 任务。这意味着切换上下文和要在其 rails 项目上下文的上下文中运行的 rake 任务。

该任务首先加载环境:

应该运行此任务的代码如下所示:

从项目目录执行时,任务成功运行,但从上面的脚本中抛出错误:

耙中止!LoadError: 无法加载此类文件 -- rails/all /home/csrhub/git/csrhub-frontend/config/application.rb:3:in >`require'

当然在 application.rb 中有这样一行:

但是有什么区别呢?从 bash 工作,从脚本没有。

正如你所看到的,我正在使用open3- 在这种情况下应该是最好的。

我认为这与上下文有关。当我用 替换命令cmd = "bundle exec rake store:update""rails -v",我收到此错误:

rbenv:rails:找不到命令

所以我认为问题出在没有查看正确的gemfile。

0 投票
0 回答
44 浏览

python - 与持续运行的子进程交互

蟒蛇 3.7

测试.py

镜像.py

所以我想连续运行mirror.py并多次交互(向它们发送消息并从它们到达ansver)。但是当我尝试将 While True 循环添加到 mirror.py 时,我卡住了:test.py 没有显示任何内容我尝试更改输入并打印到 sys.stdin/out.read/write 并得到相同的结果,我尝试将循环更改为将输入/打印对相乘并得到相同的结果

我想我需要停止从标准输出读取(也许在镜像输入后从 mirror.py 发送一些特殊的东西)有人可以帮助我达到目标吗?

谢谢

0 投票
1 回答
112 浏览

python - 将变量传递给 Subprocess.Popen 以运行复制命令

我有一个脚本,它运行复制命令来复制文件和目录。因为,我将参数存储在变量中。

我在运行时传递 Option['source'] & Option['destination'] 的值。我无法执行命令并获取....

我正在使用的命令是

0 投票
1 回答
75 浏览

ruby - 跟踪在 ruby​​ 中使用 open3 调用的 dd 命令的进度

我正在尝试监视将 raspberry-pi OS 映像复制到 microSD 卡的进度。这类似于Kill a process called using open3 in ruby​​ ,除了我没有杀死该进程,我正在向它发送命令以发出进度消息。

第一部分(在“if false”之后)使用Open3.capture2e闪烁图像。这可行,但当然不会发布任何进度信息。

'else' 之后的部分使用Open3.popen2e闪烁图像。它还尝试通过发出 'Process.kill("INFO", wait_thr.pid)' 或通过每 5 秒向标准输入流发送 ^T (20.chr) 来显示进度。

Process.kill行生成“不允许操作”错误。stdin.puts行完全没有效果。

另一件事......当 popen2e 进程闪烁时,在键盘上按 ctrl-T 确实会产生进度响应。我只是无法让它以编程方式完成。

任何帮助表示赞赏!

0 投票
3 回答
418 浏览

python - 如何将字典作为函数的返回值作为子进程返回到其父进程?

我有两个脚本 parent.py 和 child.py parent.py 调用 child.py 作为子进程。Child.py 有一个在字典中收集某些结果的函数,我希望将该字典返回给父进程。我尝试通过将该字典从 child.py 打印到它的 STDOUT 上,以便父进程可以读取它,但这对我没有帮助,因为字典的内容正在被父进程作为单独的行中的字符串读取。

此外,正如评论中所建议的,我尝试使用 JSON 序列化字典,同时在标准输出上打印它,并使用 JSON 从父级读回它,这工作正常,但我也将许多其他信息从子级打印到其标准输出最终也被父母阅读并混淆了。

提出的另一个建议是将子级的结果写入目录中的一个文件,并让父级从该文件中读取。这也可以,但我会在 Celery 中运行 100 多个此代码的实例,因此它会导致子的其他实例覆盖同一个文件。

我的问题是,因为我们有一个连接两个进程的管道,我如何才能将我的字典直接从 child.py 写入管道并从 parent.py 读取

0 投票
1 回答
228 浏览

ruby - Ruby:拦截popen系统调用并将stdout和stderr记录到同一个文件中

在 ruby​​ 代码中,我正在使用 Open3.popen3 运行系统调用,并使用生成的 IO 用于 stdout 和 stderr 在写入一个日志文件之前进行一些日志消息格式化。我想知道这样做的最佳方法是什么,以便日志消息将保持正确的顺序,注意我需要对错误消息和标准输出消息进行单独的格式化。

这是我当前的代码(假设记录器是线程安全的)

到目前为止,这对我有用,但我不太确信我可以保证日志消息的正确顺序。有没有更好的办法?

0 投票
0 回答
142 浏览

ruby - 使用 Open3.popen3 等待 Process::Waiter 的 Ruby 死锁

Open3.capture3在我的 ruby​​ 代码中使用并开始注意到死锁。我做了一些研究,发现了这个关于 open3 如何导致死锁的很棒的博客。考虑到这一点,我想出了自己的 capture3 方法(仍在使用Open3.popen3)来替换我当前使用的方法(见下文)。但是我发现死锁似乎仍在发生,责任方是wait_thread.value获取Process::Status. 查看Open3源代码,我可以看到这个 wait_thread 只是Process::Waiter你从Process.detach调用中得到的。我想知道是什么导致了这种僵局?有什么方法可以检查这个线程是否死锁,杀死它并返回一个自定义Process::Status(我想返回一个Process::Status而不是仅仅保持内联的整数Open3.capture3

注意我使用的 ruby​​ 版本是 2.2.5 并且在 Mac 上运行。

编辑:确切的错误No live threads left. Deadlock? (fatal)指向 wait_thread.value 调用的行号。我在另一个函数中调用 capture3 方法,在该函数中我像这样分叉进程

完整的堆栈跟踪: