Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 267
  • Last Modified:

Backticks and while

I am fairly new to perl and would like to know if the following would be ok, or if there was  a better way to do this. I tried open but $! gives me "No such file or directory" when the command works fine with either system or back ticks. also should I flush the data?
while(`$cmd`) {
print ".";
sleep(5);
}

Open in new window

0
lrudor
Asked:
lrudor
  • 2
  • 2
1 Solution
 
TintinCommented:
It's always best to describe what you are actually trying to do.

Perhaps, you want something like
open CMD, "/some/command|" or die "Can not run command $!\n";
 
while (<CMD>) {
  print;
  sleep(5);
}

Open in new window

0
 
lrudorAuthor Commented:
Tintin, thanks for your response.

here is the command that gets run:

"C:\video tools\mencoder\mencoder.exe" -sid 0 -vid 0 -nosound -o ./vid.264 -of rawvideo -ovc x264 -x264encopts bitrate=900:threads=auto:pass=1 -vf scale=704:400 -passlogfile ./pass.log -subfont-text-scale 3 "F:\videos\test.mkv"

so below returns:

"Unable to run the command. No such file or directory at"...

while system or backticks will run the command just fine.

my $cmd = '"C:\video tools\mencoder\mencoder.exe" -sid 0 -vid 0 -nosound -o ./vid.264 -of rawvideo -ovc x264 -x264encopts bitrate=900:threads=auto:pass=1 -vf scale=704:400 -passlogfile ./pass.log -subfont-text-scale 3 "F:\videos\test.mkv"';
 
print $cmd;
open CMD, $cmd or die "Unable to run the command. $!";
while (<CMD>) {
  print '.';
  sleep(5);
}

Open in new window

0
 
TintinCommented:
You left out the most important part, the | symbol at the end of the command.  Appended to the command it means pipe the output, prepended means pipe to the input.

Again, I'll ask you to describe what you are trying to achieve.

Looking at your code, I suspect what you *really* want to do is output dots while you are encoding videos?  Correct?  If so, then I would suggest a completely different approach.
my $cmd = '"C:\video tools\mencoder\mencoder.exe" -sid 0 -vid 0 -nosound -o ./vid.264 -of rawvideo -ovc x264 -x264encopts bitrate=900:threads=auto:pass=1 -vf scale=704:400 -passlogfile ./pass.log -subfont-text-scale 3 "F:\videos\test.mkv"';
 
 
open CMD, "$cmd|" or die "Unable to run the command. $!";
while (<CMD>) {
  print '.';
  sleep(5);
}

Open in new window

0
 
lrudorAuthor Commented:
Sorry for being so vague in my description, but yes that's what I am trying to achieve, and how would you going about doing it? I was just trying to create something simple, its really the first time I have done anything in perl.
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now