<div class="gmail_quote">On Wed, May 19, 2010 at 4:47 PM, Robin Gilks <span dir="ltr">&lt;<a href="mailto:g8ecj@gilks.org">g8ecj@gilks.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">&gt;<br>
&gt; I have finally been able to spend some time debugging this problem,<br>
&gt; and I have found out what is going wrong in xmltv-proc-nz when run<br>
&gt; from a user cron job.  It is in this piece of code:<br>
&gt;<br>
&gt;     if sys.stdin.isatty():<br>
&gt;         if len(args) == 0:<br>
&gt;             log.critical(&#39;No input file&#39;)<br>
&gt;             sys.exit(2)<br>
&gt;         data = open(args[0]).read()<br>
&gt;     else:<br>
&gt;         data = sys.stdin.read()<br>
&gt;<br>
&gt; It appears that sys.stdin.isatty() returns false when run from my cron<br>
&gt; job.  Which means that xmltv-proc-nz is not trying to read from the<br>
&gt; file specified on the command line and is trying to get its data from<br>
&gt; stdin.  So it gets no data, and then the XML parsing fails on an<br>
&gt; immediate end of data.<br>
&gt;<br>
&gt; When I change my cron script from this:<br>
&gt;<br>
&gt;   /usr/local/bin/xmltv-proc-nz sky.xml &gt;temp.xml<br>
&gt;<br>
&gt; to this:<br>
&gt;<br>
&gt;   cat sky.xml | /usr/local/bin/xmltv-proc-nz &gt;temp.xml<br>
&gt;<br>
&gt; it works.<br>
&gt;<br>
&gt; Since my Python skills are sadly lacking and it works by piping the<br>
&gt; data, I have not tried to fix xmltv-proc-nz.<br>
<br>
</div>Looks to me as though the test is up-side-down. There will never be a tty<br>
when run from cron so it MUST have an input file on the command line. As<br>
it is it only looks for stdin input if its not run from a terminal.<br></blockquote><div><br>I don&#39;t think so. It&#39;s easy to send stdin input to a program expecting a filename. But if you&#39;re expecting a filename and some other program has launched you and is trying to send stdin data there is nothing you can do (more to the point, there&#39;s nothing the user can do to make it work). It is tradition Unix behaviour to expect data to be passed via pipes rather than temporary files in this situation.<br>
<br>Cheers,<br>Steve<br></div></div>