视频在Perl脚本中停留在系统(1,@命令)上

问题描述 投票:4回答:3

我正在尝试编写一个Perl脚本,在Windows Media Player上依次在n目录中运行视频。

出于某种原因,在第64次视频播放时,它被卡在system(1, @commands)上。

现在,命令是以下for循环中的system(1, "C:\\Program Files (x86)\\Windows Media Player\\wmplayer", $path);

for (my $i = 0; $i < $n; $i++)
{
    # do stuff

    # Play video
    system(1, "C:\\Program Files (x86)\\Windows Media Player\\wmplayer", $path);

    sleep $duration + 1;

    # do stuff
} 

我想知道为什么它一直停在第64个视频(我已经多次运行,它总是第64个。)也许有人可以更好地向我解释system(1, @commands)?我所知道的是,它只是不等@commands完成继续该计划之前......

非常感谢!

windows perl system media windows-media-player
3个回答
10
投票

您已达到可以同时运行的最大子进程数。收获那些使用waitpid完成的。


或者,如果您不关心进程的退出代码,那么您可能会更幸运

system(qq{start /b "" "c:\...\wmplayer" "$path"});

2
投票

感谢大家的帮助!

我发现VLC播放器比Windows Media Player有更多的命令行支持,而且它正是我所需要的:

vlc --play-and-exit $path

我停止使用system(1,@commands),我只是使用常规的旧system(@commands),到目前为止一切似乎都运行良好! =]


0
投票

语法是

system(command,@args)

要么

@args=("command","arg1","arg2"); 
system(@args);

在你的情况下,命令是1,不知道它意味着什么。而是试试

system("C:\\Program Files (x86)\\Windows Media Player\\wmplayer.exe", $path);

这里,命令是.exe(或二进制),它将视频路径作为参数。

更新:根据评论

system(1,"C:/Program Files (x86)/Windows Media Player/wmplayer.exe", $path);

应该管用。正常播放第64个视频,检查它是否有效,或者重新配置视频序列,看看它是否仍然是导致第64个视频问题。

© www.soinside.com 2019 - 2024. All rights reserved.