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

时间:2011-07-11 11:36:15

标签: ruby excel external

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

我知道我可以用

启动excel表
system 'start excel "my/path/to/the/sheet"' 

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

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

不要使用start!命令 system 将等待结果。在Windows提示符下, start 命令以异步方式启动程序。

system 'excel yout/path/sheet'

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

%x{ ls }

如果命令中有 start 命令,%x将等待输出..

答案 2 :(得分:2)

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

system("notepad.exe")

在Ruby中执行此操作的另一种方法是使用反引号。

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

但是,您指出了Excel作为示例。如果您打开常规Windows命令提示符,您会注意到虽然start excel path\to\sheet将打开Excel,而excel path\to\sheet则不会。您将收到有关“excel”如何不是公认的内部或外部命令的错误。解决此问题的方法是将Excel的路径添加到Environment Variables中,或者在system()调用中包含Excel的路径。

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

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