首页 文章

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

提问于
浏览
9

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

我知道我可以用excel表启动

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

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

3 回答

  • 2

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

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

    不要用start!命令系统将等待结果 . 在Windows提示符下,start命令异步启动程序 .

    system 'excel yout/path/sheet'
    

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

    %x{ ls }
    

    如果你的命令中有启动命令,%x将等待输出 .

  • 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脚本将等待应用程序的终止 .

相关问题