Win XP: Problem with shell scripting in Python
John Machin
sjmachin at lexicon.net
Thu Jun 8 20:47:37 EDT 2006
On 9/06/2006 8:58 AM, A.M wrote:
> Hi,
> I am having difficulty with shell scripting in Python.
> I use the following command to run a DOS command and put the return value in
> a Python variable:
> print os.popen('DIR').read()
> It works very fine with DIR command, but for commands like "MD :" it doesn't
> return the error message into the string:
> print os.popen('MD :').read()
> # No error message
> When I use Ruby, it works perfect:
> `md :`
>
Irrelevant; different "it".
> The filename, directory name, or volume label syntax is incorrect.
>
>
I have never had occasion to use os.popen_anything before. Perhaps we
can aid each other on the path to enlightenment. I got the following
idea from looking at the manual.
|>>> handles = os.popen3('MD :')
|>>> [f.read() for f in handles[1:]]
['', 'The filename, directory name, or volume label syntax is incorrect.\n']
|>>> [f.close() for f in handles]
[None, None, 1]
|>>> handles = os.popen3('dir *.py')
|>>> [f.read() for f in handles[1:]]
[' Volume in drive C has no label.\n Volume Serial Number is **BIG
SNIP** bytes free\n', '']
|>>> [f.close() for f in handles]
[None, None, None]
Windows does occasionally adhere to *x conventions like "data to stdout,
error messages to stderr" :-)
Now it's *your* turn to do something for the cause. It appears to me
that popen4 has exactly the same documentation as popen3, as recently as
2.5a2. I see no fourth gizmoid here.
Whoooaaah! "4" is not a gizmoid count:
|>>> handles = os.popen4('MD :')
|>>> handles
(<open file 'MD :', mode 'w' at 0x00AAF698>, <open file 'MD :', mode 'r'
at 0x00
AAF4E8>)
You might like to suss this out, and raise a request to have the docs fixed.
Cheers,
John
More information about the Python-list
mailing list