我有一个小脚本,它执行一个批处理语句并开始下载一个流。批处理语句将继续进行,直到停止。我需要脚本继续到下一行(在那里它设置了正在创建的文件的位置),因为它只会继续当前一行代码(批处理语句)完成。这可能吗?下面是代码:
#!/usr/bin/perl
use strict;
use warnings;
my $test_path= "http://xxx.xxx.x.x:8000/test/stream1.m3u8";
my $status = system("batch statment here");
print "Location: $test_path\n\n" or die "can't do it:$!";
2条答案
按热度按时间ktca8awb1#
如何在perlfaq 8中的后台启动一个进程列出了几个可以使用的模块,但是Proc::Background对于这个特定的任务来说似乎是最简单的。它可以在Windows和 *nix上工作,所以如果你切换操作系统,你不应该改变你的Perl代码(尽管你必须改变你调用的外部命令)。像这样运行:
new
方法的工作方式与内置的system
命令非常相似。您可以像我上面所做的那样,传递一个参数列表,命令名后跟参数(不调用shell);或者传递一个包含命令及其参数的字符串(确实调用shell)。在Windows上,可以将绝对或相对路径传递给可执行文件:
如果可执行文件的名称是绝对路径,则new将检查该可执行文件是否存在于给定位置,否则将失败。如果可执行文件的名称不是绝对的,则使用PATH环境变量搜索可执行文件。输入的可执行文件名称总是替换为此进程确定的绝对路径。
此外,在搜索可执行文件时,将使用未更改的可执行文件名称搜索可执行文件,如果未找到,则在名称后附加“.exe”进行检查,以防传递的名称不带“.exe”后缀。
请注意,在某些时候,如果您想获得批处理命令的退出状态,则必须调用
$proc->wait
。如果进程仍在运行,则必须等待它完成(惊喜,惊喜)。但是,您可以将此步骤推迟到脚本结束时,并在此期间完成一些其他工作。如果你需要终止进程,你可以使用
$proc->die
,如果进程已经停止或者已经死亡,则返回1
,否则返回0
。您也可以将
die_upon_destroy
选项设置为new
,以便在相应的Proc::Background
对象被销毁时终止进程:请注意这是如何与词法作用域一起工作的:
您也可以使用
timeout_system
来限制外部命令的运行时间,而不是使用new
方法创建Proc::Background
对象:当超时过期时,进程将被终止。
uubf1zoe2#
在类Unix系统上,可以在后台运行命令
但是,您将不会从批处理命令中获得返回状态,而是从shell中获得。