I'm struggling to save the stdout output of a python2.6 script into a file when I run it as an upstart job.
This is my current test script:
#!/usr/bin/python
from time import sleep
import sys
while 1:
print "Hello from stdout"
print >> sys.stderr, "Hello from stderr"
sleep(1)
if I do $ myscript >> /var/log/myscript that works fine. I see both.
However, as an upstart script, if I use the following conf
/etc/init/myscript.conf:
exec /path/to/myscript >> /var/log/myscript 2>&1
I see this:
Hello from stderr
Hello from stderr
Hello from stderr
Hello from stderr
Hello from stderr
Hello from stderr
If I use a different file for stderr and stdout, they are both created, but the stdout is always empty.
What am I doing wrong?
Buffering and flushing would be the guess.
stderr is typically an unbuffered stream while stdout is buffered. When you send it to a file it will be buffered in 4k chunks (typically).
If you make the following change:
while 1:
print "hello from stdout"
sys.stdout.flush()
print >> sys.stderr, "Hello from stderr"
sleep(1)
You should see output in your file.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With