簡體   English   中英

Perl腳本不運行系統命令

[英]Perl script not run system command

我試圖通過Perl腳本運行mplayer system命令編碼視頻,但無法正常工作

#!/usr/bin/perl
`"/usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>(/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log) input.mov"`;

如果我在ssh終端上運行

/usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>(/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log) input.mov

命令工作ssh終端無法在perl腳本中工作

Perl腳本中有太多引號集。 咬牙疼,我想你可以這樣做:

#!/usr/bin/perl
`/usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>(/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log) input.mov`;

哦; 你在那里有一個bash進程重定向。 這使問題復雜化; 你不能簡單地將命令拆分為:

 #!/usr/bin/perl my $x264 = "/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log"; exec "/usr/bin/mplayer", "-nosound", "-benchmark", "-vo", "yuv4mpeg:file=>($x264)", "input.mov"; 

這通常是最好的方式; 這對你不正確。

你可能還會更好地使用:

#!/usr/bin/perl
system "/usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>(/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log) input.mov";

因為你真的對命令的輸出不感興趣。 OTOH,沒有理由像這樣使用Perl。 最好寫一下:

#!/usr/bin/bash
/usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>(/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log) input.mov

在命令之前可選地使用exec

#!/usr/bin/bash
exec /usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>(/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log) input.mov

有關請求漏出的原因和原因的信息,我們觀察到:

sh:1:命令:在perl腳本中找不到錯誤輸出

提到sh表示問題的一部分。 bashsh運行時,它不支持進程替換。 鑒於這是一個更大的Perl腳本的一個片段,我們將繼續努力從Perl運行命令。

#!/usr/bin/perl
use strict;
use warnings;

my $x264 = "/usr/local/bin/x264 --demuxer y4m --crf 24 --output output.h26 - 2>x264.log";
system "bash", "-c",
       "/usr/bin/mplayer -nosound -benchmark -vo yuv4mpeg:file=>($x264) input.mov";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM