os.popen3 with windows; help?
Russell E. Owen
rowen at cesmail.net
Fri Oct 29 18:33:20 EDT 2004
In article <mailman.5676.1099074998.5135.python-list at python.org>,
Josiah Carlson <jcarlson at uci.edu> wrote:
>"Russell E. Owen" <rowen at cesmail.net> wrote:
>> - quote the path in '"..."' (single quotes on the outside; no other form
>> of double quoting I tried worked). Fails on Windows.
>
>Which windows? It works for me on both 2k and XP (though I'm not
>running ds9):
>>>> os.popen3('"C:\\Program Files\\WinImage\\winimage.exe"')
>(<open file '"C:\Program Files\WinImage\winimage.exe"', mode 'w' at
>0x007E7AE0>,
> <open file '"C:\Program Files\WinImage\winimage.exe"', mode 'r' at
> 0x007EC2E0>,
> <open file '"C:\Program Files\WinImage\winimage.exe"', mode 'r' at
> 0x007EC360>)
You are right!
Putting double quotes around the path to the executable works so long as
there are no command line arguments. Unfortunately, as soon as you add
extra words, os.popen3 acts as if the double quotes are missing and can
no longer find the executable.
This works:
os.popen3('"C:\\Program Files\\ds9\\ds9"')
This fails on Windows -- cannot launch C:\Program -- but I tried
equivalent code on unix and it works fine (not that one normally needs
it on unix; executables are usually found automatically):
os.popen3('"C:\\Program Files\\ds9\\ds9" -title foo -port 0')
I see this same bug trying to use the subprocess module in Python 2.4b1
with my Windows Python 2.3 (see PR 105470:
<http://sourceforge.net/tracker/index.php?func=detail&aid=1057048&group_i
d=5470&atid=105470>).
My current solution is to temporarily change to the executable's
directory, for example:
currDir = os.getcwd()
try:
os.chdir(_XPADir)
fds = os.popen3("xpaget ds9 file myfile.fits")
finally:
os.chdir(currDir)
*****
Regarding my statement you quoted:
- quote the path in '"..."' (single quotes on the outside; no other form
of double quoting I tried worked). Fails on Windows.
That was in reference to using xpa to send file names to ds9. The file
name is sent as a command line argument, so it's a different issue than
discussed above. For those who care, it turns out that "{...}" is the
recommended way to send such paths to ds9. That's fine, but it also
turns out that ds9 on Windows requires the directory separator to be /,
not \!
For any ds9/xpa users out there, I posted a summary what I learned:
"Tricks for Using xpa to Command ds9":
<http://www.astro.washington.edu/rowen/ds9andxpa.html>. I'll keep this
updated if I learn anything new. I also hope to shorten it if some of
the ds9 bugs and quirks are fixed. I do not discuss the details of
os.popen3 and such, just xpa/ds9 issues.
Thank you all again for all your help. I hope to have a cross-platform
version of RO.DS9 out in the next week or so.
-- Russell
More information about the Python-list
mailing list