在ruby中执行外部程序并等待执行

如何从ruby启动外部程序(如excel表),并等待其执行resp。 在继续之前终止。

我知道我可以启动Excel表格

system 'start excel "my/path/to/the/sheet"' 

但是使用这只会启动工作表,然后继续。

你遇到的问题不是Ruby而是启动命令,这将启动另一个程序并立即返回。 你需要让这个命令等待excel完成使用wait标志:

 system('start /wait excel "my/path/to/the/sheet"') 

不要使用开始! 命令系统将等待结果。 在Windows提示符下, 启动命令asynchronous启动程序。

 system 'excel yout/path/sheet' 

或者你也可以使用%x,如果你想要一个数组作为结果:

 %x{ ls } 

如果你的命令中有start命令,%x将会等待输出。

如前所述,删除“start”会导致Ruby脚本等待。

 system("notepad.exe") 

在Ruby中的另一种方法是反引号。

 `notepad.exe` # Same effect. Will also accept #{} variable insertion 

但是,您指出了Excel作为示例。 如果你popup一个常规的Windows命令提示符,你会注意到,虽然start excel path\to\sheet会打开Excel,而只有excel path\to\sheet不会。 你会得到一个关于“excel”不是一个公认的内部或外部命令的错误。 解决这个问题的方法是将Excel的path添加到环境variables中,或者在system()调用中包含Excel的path。

 EXCEL = File.join("C:", "Program Files", "Microsoft Office", "OFFICE11", "excel.exe") `"#{EXCEL}" "path\to\sheet"` 

(在这里使用反引号只是我的偏好,我更喜欢它,因为它启用了variables插入。)这将调出一个Excel实例,Ruby脚本将等待应用程序的终止。