【问题标题】:Perl script is not waiting for a .bat file to complete and continuing executionPerl 脚本不等待 .bat 文件完成并继续执行
【发布时间】:2016-07-20 11:48:08
【问题描述】:

我正在从 perl 脚本调用一个 bat 文件。
由于 bat 文件需要很长时间才能执行,因此 perl 脚本不会等待 bat 文件完成并从下一行继续执行。

有没有一种方法可以暂停 perl 脚本的执行,直到 bat 文件执行完毕,然后在 bat 文件执行完毕后继续执行。

我是这样写的:

system ("start $bat_file");
print ("Hello");

所以它甚至在 bat 文件完成之前打印 hello。

其实我想要完成的是:

  1. 我的 bat 文件创建了一些文件
  2. 我想在 bat 文件完成后将这些文件复制到另一个位置。

但由于它没有等待 bat 文件完成,因此复制失败,因为它试图复制一个不存在的文件夹,因为 bat 文件仍在处理中并且尚未生成输出文件。

注意:完成bat文件的时间不是固定的,每次都会变化。

【问题讨论】:

  • 您是否使用了systemexecqx 或反引号`
  • 是的,有。但这很大程度上取决于你在做什么。为此,我们需要一些代码示例。
  • 是的,我使用了系统。我写了这样的东西:system("start $bat_file");

标签: perl


【解决方案1】:

您需要删除start 命令

如果没有/wait 选项,start 将创建一个进程并立即返回

但根本不需要start。你可以只写

system($bat_file);

达到你想要的效果

【讨论】:

    【解决方案2】:

    您遇到的问题是start command 的问题,而不是system 的问题

    当您在 Windows 上使用start 命令时,它会启动您的程序,但不会等待结束。

    你必须在start之后使用/wait
    在您的代码中它将是:

    system ("start /wait $bat_file"); 
    print ("Hello");`
    

    Start Manual

    【讨论】:

    • 当我使用你提到的代码时,即使在bat文件完成后,调用也永远不会返回给调用者。它只是保持挂起状态,并且在 bat 文件完成后永远不会恢复操作。但是,如果我写 system($bat_file);
    猜你喜欢
    • 2010-11-23
    • 2014-08-23
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多