Colin J. Williams wrote:
Below is a test script:

# tSubProcess.py

import subprocess
import sys
try:
  v= subprocess.Popen('ftype py=C:\Python25\Python.exe')
except WindowsError:
  print(sys.exc_info())

I'm assuming that you've previously done something like this:

 assoc .py=py

and are now trying to do this:

 ftype py=c:\python25\python.exe

You've got a few issues to resolve there. If you're using a
string containing a backslash (basically, any Windows path)
you need to tell Python to treat the backslash as a backslash
and not as an escape character. Simplest way to do this is
to prefix the string with r for raw:

 r"ftype py=c:\python25\python.exe"

In this case it wouldn't matter too much because \p isn't
a recognised escape sequence. But as soon as you hit, say,
"c:\files" you'll be in trouble because \f is the escape
sequence for ASCII 12.


OK. The next thing is that ftype is not actually an .exe
in its own right: it's provided by the command shell
(cmd.exe or whatever). That means you have to ask the
subprocess module to call the shell on your behalf:

 subprocess.Popen (r"...", shell=True)

Finally, for simple do-it-and-finish subprocess calls like
yours, it's generally advantageous to use the convenience
function .call, and pass the params as a list of params
which avoid other issues to do with embedded spaces.
(Usually: there is an outstanding bug there). So...


import subprocess
subprocess.call (["ftype", r"py=c:\python25\python.exe"], shell=True)


TJG
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to