[Python-Dev] popen test case inquiry in r55735 using PCBuild8

Joseph Armbruster josepharmbruster at gmail.com
Sun Jun 3 02:34:22 CEST 2007


I wanted to pass this one around before opening an issue on it.
When running the unit test for popen via rt.bat (in PCBuild8),
I received the following error:


C:\Documents and 
Settings\joe\Desktop\Development\Python\trunk\PCbuild8>rt test_popen
Deleting .pyc/.pyo files ...
43 .pyc deleted, 0 .pyo deleted

C:\Documents and 
  -E -tt ../lib/test/regrtest.py te
test test_popen failed -- Traceback (most recent call last):
   File "C:\Documents and 
line 31, in test_popen
     ["foo", "bar"]
   File "C:\Documents and 
line 24, in _do_test_commandline
     got = eval(data)[1:] # strip off argv[0]
   File "<string>", line 0

SyntaxError: unexpected EOF while parsing

1 test failed:

=== END ERROR ===

Only naturally, I looked into what was causing it and noticed the 
following:  Line 23 of the test_popen.py appears to be returning ''
and assigning this to data.

data = os.popen(cmd).read()

The problem with is, the next line (24) assumes the previous line
will work and goes on to perform the following strip and assert:

got = eval(data)[1:] # strip off argv[0]
self.assertEqual(got, expected)

So, in a perfect world, ['-c','foo','bar']\n is what data Should be.
I put some quick debug statements after line 23 in test_popen.py to 
verify this and I observed the following:

cmd= "C:\Documents and 
-c "import sys;print sys.argv" foo bar

Now, on to the 'interesting' part.  From the command line, observe the

C:\Documents and 
-c "import sys; print sys.argv" foo bar
['-c', 'foo', 'bar']

Outside of the popen call failing.  I am wondering if an appropriate 
assert should be performed on the data object, prior to line 24.

In addition, if you debug into the posixmodule, this is the scoop:

1. breakpoint set in posixmodule at the start of posix_popen
2. i run in debug
3. run the following:

import os
tmp = os.popen('"C:/Documents and 
-c "import sys;print sys.argv" foo bar')

3. call enters posixmodule posix_popen and follows path:
	f = _PyPopen(cmdstring, tm | _O_TEXT, POPEN_1);

4. enters posixmodule:  _PyPopen

5. enters posixmodule:  _PyPopenCreateProcess

6. enters posixmodule linen 4920 where the CreateProcess is...
s2 checks out as:
"C:\WINDOWS\system32\cmd.exe /c "C:/Documents and 
-c "import sys;print sys.argv" foo bar"

this call returns nonzero, which means it "succeeded". see:
[ http://msdn2.microsoft.com/en-us/library/ms682425.aspx ]

On another note, I ran across CreateProcessW and am interested in 
questioning whether or not this has a place in posixmodule?

Any on yet another note, when I ran test_popen.py straight from /lib 
(using my std::Python25 install, I obtained the following debug output 
in the same statement of interest)

data=['-c', 'foo', 'bar']
cmd=c:\python25\python.exe -c "import sys;print sys.argv" foo bar

Your thoughts ?

Joseph Armbruster

More information about the Python-Dev mailing list