capture stdout and stderror from within a Windows Service?

Chris Curvey ccurvey at gmail.com
Fri May 15 08:24:03 EDT 2009


On May 14, 11:57 am, Chris Curvey <ccur... at gmail.com> wrote:
> I'm trying to get this invocation right, and it is escaping me.  How
> can I capture the stdout and stderr if I launch a subprocess using subprocess.check_call()?  The twist here is that the call is running
> from within a Windows service.
>
> I've tried:
>
> check_call("mycmd.exe", stdout=subprocess.PIPE)  [raises an exception
> "An integer is required"]
>
> check_call("mycmd.exe", stdout=file("c:\\temp\\foobar.txt", "w"))
> [raises an exception "An integer is required"]

Ahhh, Blake put me on the right track.  If you want any of the
streams, you have to supply values for all of them, like so:

p = subprocess.Popen(step, shell=True
      stdout=subprocess.PIPE,
      stdin=subprocess.PIPE,
      stderr=subprocess.PIPE)

(stdout, stderr) = p.communicate()

and, incidentally, it appears that you have to use UNC paths in your
Popen call -- drive letters won't work.

so "dir \\foobar\myshare\mydir" will work, but "dir j:\mydir" will
not.

Many thanks for all your assistance.





More information about the Python-list mailing list