[mythtv-users] Tweaking the Transcode Wrapper Stub

Raymond Wagner raymond at wagnerrp.com
Fri May 2 13:59:32 UTC 2014


On 5/2/2014 9:22 AM, Joseph Fry wrote:
> Thanks Raymond, and I apologize for not being more clear.  Yes, I want
> to read the output while the command is in progress.so that I can
> update the job's progress information (as you see when you look at an
> in progress mythtranscode job).
>
>  From what you said above, it looks like I need to adjust this block
> somehow to tell it to use the ._runasync() method instead of
> ._runcmd() method... but the code doesn't explicitly call either
> method so what do I change?:
>
>    task = System(path=transcoder, db=db)
>        try:
>            output = task(<my avconv arguments>)

Running task(args) will run the __call__() method, which in turn runs 
the command() method, and you're right back where you were. You need to 
create the System object, and then run _runasync() instead.

 >>> task = System(path=transcoder, db=db)
 >>> taskinst = task._runasync(<my avconv arguments>)


> Also, I had looked at the Process.poll method, however I cannot figure
> out how to use it.  Is it as simple as doing something like this in my
> try: block?
>
> while True:
>      output.poll()

That does nothing.  poll() returns the status of the application 
instance.  -1 means it is still running (I think). 0 means it has 
terminated successfully.  >0 means it has terminated with an error.


>      line = output.stdout.readline()
>      eline = output.stderr.readline()

This is a simple character buffer.  It has no smarts to recognize end of 
lines, so readline() is not available.  If you want to read one line at 
a time, you will need to read into your own buffer, and then scan 
through it to discover individual lines, or patch the DequeBuffer class 
to add a readline() method.

>      if (line == "" and eline == "" and process.returncode != None):
>          break

returncode is populated by the _runcmd() method, populated by waiting 
for the application instance to terminate, and then querying that code 
using poll().  It will not be available if you are using _runasync() 
instead of _runcmd().  You will need to poll() the Process object directly.

> Is there a script that you are aware of that uses this that I could look at?

I don't believe I've ever used the async interface for this class.



More information about the mythtv-users mailing list