4

nWindows Media Player のディレクトリ時間でビデオを次々に実行する Perl スクリプトを作成しようとしています。

なんらかの理由で、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

私は使用をやめsystem(1,@commands)、通常の古いものを使用しているsystem(@commands)だけで、これまでのところすべてがうまく機能しているようです! =]

于 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 に答える