• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

cfexecute output on linux

Community Beginner ,
Dec 07, 2010 Dec 07, 2010

Copy link to clipboard

Copied

Hey everyone, I'm working on doing some stuff with cfexecute via Linux (Ubuntu Server), running ColdFusion 9.  I am having trouble capturing the output of the command that is executed.  Here is the cfexecute line of code:

<cfexecute name="/usr/local/bin/ffmpeg" arguments="-i '#qGetFiles.directory#/#qGetFiles.name#' 2>&1" outputFile="/home/username/output.txt" timeout="30"></cfexecute>

I have also tried the following, but just get an empty variable returned:

<cfexecute name="/usr/local/bin/ffmpeg" arguments="-i '#qGetFiles.directory#/#qGetFiles.name#' 2>&1" variable="mediaInfo" timeout="30"></cfexecute>

<cfoutput>'#mediaInfo#'</cfoutput><br>

I realize I'm using variables for the input source file path and have verified the paths are all valid.  I verified my CF server is running as root so I know it has the right permissions.  I'm not getting any error message.  I can run the command directly at the CLI with no issues.  I have tried this same code on a Windows server and was able to make it work.  I have also verified that the "2>&1" approach to redirecting the stderr to the output (thanks Ben Forta) works on the Linux OS.

Anyone out there have experience getting access to the output created by cfexecute on a Linux server?  I'm totally stumped on this one would very much appreciate someone coming to my rescue. 

TOPICS
Advanced techniques

Views

2.6K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 08, 2010 Dec 08, 2010

Copy link to clipboard

Copied

A couple more pieces of info on this that I forgot.  The first is that when I run the following line of code...

<cfexecute name="/usr/local/bin/ffmpeg" arguments="-i '#qGetFiles.directory#/#qGetFiles.name#' 2>&1" outputFile="/home/username/output.txt" timeout="30"></cfexecute>

...the output file, "output.txt" is blank.  I then ran the following line of code...

<cfexecute name="echo" arguments="foo" outputfile="/home/username/testoutput.txt" timeout="30" />

...and discovered that my "testoutput.txt" file had the contents of "foo" in it.  So I have now also confirmed that cfexecute is working on my linux server.

So the last thing I have done to test the execution script on the server itself.  When I run the following line of code at the CLI, the output.txt file is properly updated with the output from the script that I run:

sudo /usr/local/bin/ffmpeg -i /var/foldername/test2.avi > output.txt 2>&1

Here's what is now contained in the output.txt file:

FFmpeg version SVN-r25819, Copyright (c) 2000-2010 the FFmpeg developers

  built on Nov 24 2010 09:29:26 with gcc 4.4.5

  configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab

  libavutil    50.33. 0 / 50.33. 0

  libavcore      0.14. 0 /  0.14. 0

  libavcodec    52.97. 2 / 52.97. 2

  libavformat  52.86. 1 / 52.86. 1

  libavdevice  52. 2. 2 / 52. 2. 2

  libavfilter    1.64. 0 /  1.64. 0

  libswscale    0.12. 0 /  0.12. 0

  libpostproc  51. 2. 0 / 51. 2. 0

Input #0, avi, from '/var/mediaServer/9/test2.avi':

  Duration: 00:01:00.00, start: 0.000000, bitrate: 29162 kb/s

    Stream #0.0: Video: dvvideo, yuv420p, 720x576 [PAR 16:15 DAR 4:3], 25 tbr, 25 tbn, 25 tbc

    Stream #0.1: Audio: pcm_s16le, 22050 Hz, 1 channels, s16, 352 kb/s

At least one output file must be specified

Now here's the last weird piece to the puzzle; if I run the following line of code:

<cfexecute name="/usr/local/bin/ffmpeg" arguments=" --help 2>&1" variable="mediaInfo" timeout="30"></cfexecute>

<cfdump var="#mediaInfo#">

...I end up getting ffmpeg's help documentation output to the screen.  So now I know that cfexecute is correctly launching the ffmpeg application.  So now why would sending it a file path suddenly cause it to break?

Any takers?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Dec 08, 2010 Dec 08, 2010

Copy link to clipboard

Copied

It looks like I just figured this one out.  Thanks to a small post by Ray Camden at the very bottom of the documentation for cfexecute, he mentions about an undocumented attribute called "errorVariable".  So I plugged that in and it worked.  See code below:

<cfexecute name="/usr/local/bin/ffmpeg" arguments='-i "/var/foldername/test2.avi"' timeout="30" errorVariable="errorInfo"></cfexecute>

<cfdump var="#errorInfo#"><cfabort>

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guide ,
Dec 10, 2010 Dec 10, 2010

Copy link to clipboard

Copied

Ooh, that's a cheeky little attribute. As I've only just seen this post (and for posterity's sake), was the issue relevant to CF? Or something different that isn't of concern?

O.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
Dec 13, 2010 Dec 13, 2010

Copy link to clipboard

Copied

LATEST

On Windows too, ffmpeg.exe output can be found in the error variable rather than in the output variable. I also spent a couple of hours on this one the other week. 🙂

In case the future versions of ffmpeg start returning output to the output variable, it's better to make your ColdFusion code so that it recognizes either one - if the length of the output variable is longer than the error variable, only then use the output variable, etc...

-Fernis

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources
Documentation