Ruby запускает внешнюю программу, останавливает скрипт

У меня есть рубиновый скрипт, который на полпути мне нужен для запуска другой программы.

После запуска программы остальная часть скрипта не запускается. Например:

# some ruby that gets run

exe = "Something.exe"
system(exe)

# some ruby that doesnt run

Я также пытался использовать Open3.popen2e(cmd) и Open3.popen3(cmd), но это то же самое.

Может ли кто-нибудь помочь мне понять, что здесь происходит и как это исправить?

примечание: я использую окна


person Brad    schedule 13.09.2017    source источник
comment
Ваш Something.exe завершает свое выполнение? Похоже, что ваш ruby-скрипт ожидает завершения команды, прежде чем продолжить   -  person mabe02    schedule 13.09.2017
comment
Программа продолжает работать в фоновом режиме, поэтому я действительно не хочу, чтобы ruby ​​ждал, я просто хочу, чтобы он отправил команду и продолжил.   -  person Brad    schedule 13.09.2017


Ответы (2)


Попробуйте запустить Something.exe в новом потоке:

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

person thaleshcv    schedule 13.09.2017

Если вы хотите запустить System.exe асинхронно и продолжить работу, не дожидаясь его завершения, вы можете использовать порождение или многопоточность.

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

Согласно этому предыдущему ответу, это должно работать и в Windows (в то время как fork или другие методы не работают).

В этой статье вы можете найти несколько примеров используя system, exec, fork, spawn и Thread в Unix.

Я не могу воспроизвести это, но, возможно, стоит посмотреть, работает ли использование system("start System.exe") в Windows, как system("cmd &") работает в UNIX. Вы можете обратиться к начальной документации здесь.

person mabe02    schedule 13.09.2017
comment
Спасибо за ваш ответ, это было очень полезно - person Brad; 13.09.2017