os.popen3 with windows; help?
Russell E. Owen
rowen at cesmail.net
Fri Oct 29 00:58:34 CEST 2004
In article <8249c4ac.0410281110.39d68dc2 at posting.google.com>,
cappy2112 at gmail.com (Tony C) wrote:
>Michele Petrazzo <michele.petrazzo at TOGLIunipex.it> wrote in message
>> The problem is that there are spaces into the path. Try to user
>> os.popen3('"C:\\Program\ Files\\ds9\\ds9"').
>> The better choice is:
>> path_complete = os.path.join('c:\\', 'Program Files', 'ds', 'ds9')
>> os.popen3('"'+ path_complete +'"' )
>> It work for me.
>Try using raw strings, as I had posted in my reply.
>Then you don't have to mess with joining strings, or using double
>backslashes, or qoutes within quotes.
I find this fails the same way as not using r"..." and doubling the
backslashes. Windows thinks the path to the executable stops at the
space. (I tried os.popen3(r"C:\Program Files\ds9\ds9") and the less
likely variant os.popen3(r"C:\Program\ Files\ds9\ds9"))
More info for anyone still following this thread:
The new subprocess module has promise here as a replacement for
os.popen3, since it allows a separate executable argument. Unfortunately
my tests indicate that executable and commands-as-strings (instead of
lists) aren't compatible; I've reported this as bug 1056441
d=5470&atid=105470> for anyone who wants details.
I could recode to use commands-as-lists. This works, but is a big
headache for interactive use (one of the main targets for this module).
Also, for ds9 or xpa users:
- On Windows: ds9 will not connect to xpa unless the current directory
includes xpans or xpans is already running. Yecch. I ended up using
os.chdir before spawning ds9, then changing back.
- spaces in file names ARE bad news (as somebody warned me). ds9 can
open files with spaces in their names using the File menu, but not using
xpa. If the file name has a space you are totally out of luck. If the
path has a space (but not the file name) then you can try various tricks:
- quote the path in '"..."' (single quotes on the outside; no other form
of double quoting I tried worked). Fails on Windows.
- backslash-escape the spaces. Fails on Windows, of course.
- chdir to the file's directory first, then open, then chdir back. But
you can't be in two places at once. If you use chdir to get around the
os.popen3 problem of the executable having a space in its path name then
you can't also use it to get around the other problem.
More information about the Python-list