4

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

由于某种原因,在第 64 次视频播放时,它卡在system(1, @commands).

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

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完成......

非常感谢!

4

3 回答 3

10

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


或者,如果您不关心进程的退出代码,您可能会有更好的运气

system(qq{start /b "" "c:\...\wmplayer" "$path"});
于 2012-07-18T01:14:11.830 回答
2

感谢大家的帮助!

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

vlc --play-and-exit $path

I stopped using system(1,@commands) and I'm just using regular old system(@commands) and everything seems to be working well so far! =]

于 2012-07-18T16:09:51.217 回答
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 个视频导致问题。

于 2012-07-18T00:35:51.043 回答