[Python-Dev] popen test case inquiry in r55735 using PCBuild8
Joseph Armbruster
josepharmbruster at gmail.com
Sun Jun 3 02:34:22 CEST 2007
All,
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:
=== BEGIN 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
Settings\joe\Desktop\Development\Python\trunk\PCbuild8>win32Release\python.exe
-E -tt ../lib/test/regrtest.py te
st_popen
test_popen
test test_popen failed -- Traceback (most recent call last):
File "C:\Documents and
Settings\joe\Desktop\Development\Python\trunk\lib\test\test_popen.py",
line 31, in test_popen
["foo", "bar"]
File "C:\Documents and
Settings\joe\Desktop\Development\Python\trunk\lib\test\test_popen.py",
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:
test_popen
=== 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:
data=
cmd= "C:\Documents and
Settings\joe\Desktop\Development\Python\trunk\PCbuild8\win32Release\python.exe"
-c "import sys;print sys.argv" foo bar
Now, on to the 'interesting' part. From the command line, observe the
following:
C:\Documents and
Settings\joe\Desktop\Development\Python\trunk\PCbuild8\win32release>python
-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
Settings/joe/Desktop/Development/Python/trunk/PCbuild8/win32Release/python.exe"
-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
Settings/joe/Desktop/Development/Python/trunk/PCbuild8/win32Release/python.exe"
-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