stdin and py2exe

Thomas Heller theller at python.net
Wed Sep 14 14:06:39 EDT 2005


"Mike Tammerman" <mtammerman at gmail.com> writes:

> Yes, it throws exceptions if I build the exe of the subprogram.py.
>
> So, is it possible to pipe some data to another py2exe'd application
> without a console.

I did this just some days ago.  It required a little bit of
experimenting.  This code executes the Windows XP ftp.exe console
program (but doesn't show a console), and reads its output. Here is the
relevant code snippet:

            from subprocess import Popen, PIPE, STDOUT
            # It seems subprocess doesn't open a console by default
            # when run from a windows program
            #
            # Plus: For whatever reason, when running as py2exe'd GUI
            # program, stdin=None doesn't work.  We HAVE to specify PIPE for stdin,
            # and we HAVE to use '... < NUL', and then stdin.close().
            p = Popen("ftp.exe -s:upload.txt %s < NUL" % self._address,
                      cwd=os.path.join(util.get_main_dir(), "blah"),
                      shell=True,
                      stdin=PIPE,
                      stdout=PIPE,
                      stderr=STDOUT
                      )
            p.stdin.close()
            text = ""
            while 1:
                data = p.stdout.readline()
                if not data:
                    break
                <handle output data>
            if p.wait():
                <handle error>
                return

The problem was that passing 'stdin=None' didn't work, for whatever
reason.  I don't think it is a py2exe problem although the comment above
may suggest it.

Hope that helps,

Thomas



More information about the Python-list mailing list