Ruby 运行外部程序停止脚本

问题描述 投票:0回答:3

我有一个 ruby 脚本,中途我需要它来运行另一个程序。

运行程序后,脚本的其余部分不会运行。例如:

# some ruby that gets run

exe = "Something.exe"
system(exe)

# some ruby that doesnt run

我也尝试过使用

Open3.popen2e(cmd)
Open3.popen3(cmd)
但它是一样的。

任何人都可以帮助我了解这里发生了什么以及如何解决它吗?

注意:我使用的是Windows

ruby windows system popen3
3个回答
2
投票

尝试在新线程中运行

Something.exe

Thread.new { system("Something.exe") }


1
投票

如果您想异步运行

System.exe
并继续而不等待其完成,您可以使用spawn或多线程。

pid = spawn('System.exe')
Process.detach(pid)

根据这个之前的答案,这应该也适用于Windows(而

fork
或其他方法则不行)。

这篇文章中,您可以找到几个在 Unix 上使用

system
exec
fork
spawn
Thread
的示例。

我无法重现它,但值得看看使用

system("start System.exe")
是否适用于 Windows,就像
system("cmd &")
适用于 UNIX 一样。您可以参考启动文档here


0
投票

我在 WSL 上使用

spawn
从 Ruby 程序启动
djv
。 Ruby 程序很快就会退出,而
djv
会继续运行。这是代码:

realpath = File.realpath copy_filename
windows_path = `wslpath -m '#{realpath}'`.chomp
spawn 'cmd.exe', '/c',
      "C:\\Program Files\\DJV2\\bin\\djv.com",
      '-full_screen',
      '-full_screen_monitor', '2',
      windows_path
© www.soinside.com 2019 - 2024. All rights reserved.