2017-09-13 3 views
0

J'ai un script ruby ​​que j'ai besoin pour lancer un autre programme. Après l'exécution du programme, le reste du script ne s'exécute pas. Par exemple:Ruby exécuter le programme externe arrête le script

# some ruby that gets run 

exe = "Something.exe" 
system(exe) 

# some ruby that doesnt run 

J'ai aussi essayé d'utiliser Open3.popen2e(cmd) et Open3.popen3(cmd) mais son même.

Quelqu'un peut-il m'aider à comprendre ce qui se passe ici et comment y remédier?

Note: J'utilise Windows

+0

Est-ce que votre Something.exe termine son exécution? Il semble que si votre script Ruby attend la fin de la commande avant de continuer – mabe02

+0

Le programme reste en arrière-plan, donc vraiment je ne veux pas que Ruby attende, je veux juste qu'il envoie la commande et continue. – Brad

Répondre

1

Essayez d'exécuter Something.exe dans une nouvelle discussion:

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

+0

Cela a fait l'affaire, merci. – Brad

1

Si vous voulez exécuter votre System.exe de manière asynchrone et continuez sans attendre d'être fini , vous pouvez utiliser spawn ou multithreading.

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

Selon cette previous answer, cela devrait fonctionner sur Windows aussi bien (tout fork ou d'autres méthodes ne le font pas).

En this article vous pouvez trouver plusieurs exemples utilisant system, exec, fork, spawn et Thread sur Unix.

Je ne peux pas le reproduire, mais il pourrait être utile de voir si l'utilisation de system("start System.exe") fonctionne sur des fenêtres comme system("cmd &") fonctionne sous UNIX. Vous pouvez vous référer à la documentation de démarrage here.

+0

Merci pour votre réponse, il était très utile – Brad

+0

Vous êtes les bienvenus – mabe02