Issue1664437

classification
Title: os.system throws IllegalArgumentException
Type: Severity: normal
Components: Core Versions: Deferred
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: fwierzbicki, garethdoutch, hsk0, pekka.klarck, pjenvey
Priority: low Keywords:

Created on 2007-02-20.15:51:33 by garethdoutch, last changed 2009-06-21.21:45:58 by pjenvey.

Messages
msg1501 (view) Author: GDoutch (garethdoutch) Date: 2007-02-20.15:51:33
os.system, when calling an application with a space in the path name, causes java.lang.IllegalArgumentException to be thrown.

An example of the command (which works in CPython):

os.system('"C:/Program Files/Mozilla Firefox/firefox.exe" www.jython.org')

I am running Jython 2.2a1 on java1.6.0 and WinXP. The following is a copy of my Exception Trace:

>>> os.system('"C:/Program Files/Mozilla Firefox/firefox.exe" www.jython.org')
Traceback (innermost last):
  File "<console>", line 1, in ?
  File "C:\jython\Lib\javaos.py", line 228, in system
  File "C:\jython\Lib\popen2.py", line 232, in system
  File "C:\jython\Lib\popen2.py", line 69, in __init__
  File "C:\jython\Lib\javashell.py", line 61, in execute java.lang.IllegalArgumentException
        at java.lang.ProcessImpl.<init>(Unknown Source)
        at java.lang.ProcessImpl.start(Unknown Source)
        at java.lang.ProcessBuilder.start(Unknown Source)
        at java.lang.Runtime.exec(Unknown Source)
        at java.lang.Runtime.exec(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:174)
        at org.python.core.PyMethod.__call__(PyMethod.java:93)
        at org.python.core.PyObject.__call__(PyObject.java:607)
        at javashell$py.execute$4(C:\jython\Lib\javashell.py:61)
        at javashell$py.call_function(C:\jython\Lib\javashell.py)
        at org.python.core.PyTableCode.call(PyTableCode.java:213)
        at org.python.core.PyTableCode.call(PyTableCode.java:426)
        at org.python.core.PyTableCode.call(PyTableCode.java:322)
        at org.python.core.PyFunction.__call__(PyFunction.java:193)
        at org.python.core.PyMethod.__call__(PyMethod.java:93)
        at org.python.core.PyObject.__call__(PyObject.java:594)
        at popen2$py.__init__$7(C:\jython\Lib\popen2.py:69)
        at popen2$py.call_function(C:\jython\Lib\popen2.py)
        at org.python.core.PyTableCode.call(PyTableCode.java:213)
        at org.python.core.PyTableCode.call(PyTableCode.java:426)
        at org.python.core.PyTableCode.call(PyTableCode.java:322)
        at org.python.core.PyFunction.__call__(PyFunction.java:193)
        at org.python.core.PyInstance.__init__(PyInstance.java:174)
        at org.python.core.PyClass.__call__(PyClass.java:293)
        at org.python.core.PyObject.__call__(PyObject.java:621)
        at popen2$py.system$21(C:\jython\Lib\popen2.py:232)
        at popen2$py.call_function(C:\jython\Lib\popen2.py)
        at org.python.core.PyTableCode.call(PyTableCode.java:213)
        at org.python.core.PyTableCode.call(PyTableCode.java:426)
        at org.python.core.PyFunction.__call__(PyFunction.java:187)
        at org.python.core.PyObject._callextra(PyObject.java:725)
        at javaos$py.system$40(C:\jython\Lib\javaos.py:228)
        at javaos$py.call_function(C:\jython\Lib\javaos.py)
        at org.python.core.PyTableCode.call(PyTableCode.java:213)
        at org.python.core.PyTableCode.call(PyTableCode.java:426)
        at org.python.core.PyFunction.__call__(PyFunction.java:187)
        at org.python.core.PyMethod.__call__(PyMethod.java:120)
        at org.python.core.PyObject.__call__(PyObject.java:594)
        at org.python.pycode._pyx43.f$0(<console>:1)
        at org.python.pycode._pyx43.call_function(<console>)
        at org.python.core.PyTableCode.call(PyTableCode.java:213)
        at org.python.core.PyCode.call(PyCode.java:14)
        at org.python.core.Py.runCode(Py.java:1182)
        at org.python.core.Py.exec(Py.java:1204)
        at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:148)
        at org.python.util.InteractiveInterpreter.runcode(InteractiveInterpreter.java:88)
        at org.python.util.InteractiveInterpreter.runsource(InteractiveInterpreter.java:69)
        at org.python.util.InteractiveInterpreter.runsource(InteractiveInterpreter.java:44)
        at org.python.util.InteractiveConsole.push(InteractiveConsole.java:83)
        at org.python.util.InteractiveConsole.interact(InteractiveConsole.java:62)
        at org.python.util.jython.main(jython.java:214)

java.lang.IllegalArgumentException: java.lang.IllegalArgumentException 
msg1502 (view) Author: howard kapustein (hsk0) Date: 2007-02-21.04:09:12
And yet, oddly enough, passing the command as a list of strings works fine

GOOD:
jython.bat -c "import os ; os.system(['\\Program Files\\WinZip\\WINZIP32.EXE', 'FOO.ZIP'])"

BAD:
jython.bat -c "import os ; os.system(chr(34) + '\\Program Files\\WinZip\\WINZIP32.EXE' + chr(34) + ' FOO.ZIP')"

BTW a print shellCmd statement in javashell.py just before line 61 displays this just before the exception:
['cmd', '/c', '"\\Program Files\\WinZip\\WINZIP32.EXE" FOO.ZIP']
msg1503 (view) Author: Pekka Klärck (pekka.klarck) Date: 2007-02-21.13:39:36
More information from jython-users:

Neil Hughes writes: 	
On 20/02/2007 22:24, Michael March wrote:
> Here's a lame work-around I came up with.. I tested this under 2.2b1
>
>  >>> os.system('\"\"c:/program files/mozilla firefox/firefox.exe\"
> www.google.com\"')

Hey, don't knock it...it works :-)

Under 2.1 also. Bravo!
msg4831 (view) Author: Philip Jenvey (pjenvey) Date: 2009-06-21.21:45:58
After much pain this is solved in 2.5, which works just as CPython does
History
Date User Action Args
2009-06-21 21:45:58pjenveysetstatus: open -> closed
resolution: fixed
messages: + msg4831
nosy: + pjenvey
2009-03-14 01:15:16fwierzbickisetnosy: + fwierzbicki
2009-03-14 01:15:04fwierzbickisetpriority: normal -> low
versions: + Deferred
2007-02-20 15:51:33garethdoutchcreate