[Twisted-Python] Windows <strike>i hate it</strike> Process API

Christopher Armstrong radix at twistedmatrix.com
Mon Apr 7 22:49:19 EDT 2003


So, I've discovered[1] something new about Windows. Basically, there's
no such thing as `argv' in win32-land, and each program has to parse
its command-line manually (I had known that they had to do wild-card
expansion manually, but not parse the entire damned string). This
isn't so much the problem as there is no sane Win32 API for starting a
process with a sequence of arguments. The reason this is a problem is
that Twisted's Process API uses sequences of arguments.

In light of this, I have a few somewhat-orthogonal proposals to make,
but I think they should all be done (well, except, perhaps, the last):

 * Add a method to the Win32 Process Interface (IWin32Process?) that
   accepts a string rather than an executable and a list of args. We
   should allow people to use the (unfortunately) sanest method
   available for starting processes on Windows.

 * Add a warning to win32eventreactor.Process.__init__ (in the case
   that the user passed in a sequence of args) that tells people about
   this problem.

 * Add some auto-quoting evilness[2] to
   win32eventreactor.Process.__init__, for when arguments are passed
   as a sequence. What we have there absolutely sucks (" ".join), and we
   should probably at least try to make the existing API as reliable 
   as possible.

 * Perhaps make the string "command-line" API available on
   PosixProcess as well, so people can use either the string or the
   sequence API and expect at least some bit of cross-platformness (but
   I'm fine with telling people to just use the sequence API if others
   don't like this, especially considering this either requires
   calling out to a shell (gah), or doing some unfun argument-splitting.)

*whimper* :-(

References:
[1] http://mail.python.org/pipermail/python-win32/2003-April/000906.html
[2] <exarkun> ' '.join(['"%s"' % (s.replace('\\', '\\\\').replace('"',
              '\\"')) for s in args[1:]])

-- 
 Twisted | Christopher Armstrong: International Man of Twistery
  Radix  |          Release Manager,  Twisted Project
---------+     http://twistedmatrix.com/users/radix.twistd/




More information about the Twisted-Python mailing list