Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Quick fix for os.system requiring str parameter #1005

Merged
merged 3 commits into from

3 participants

Jörgen Stenarson Thomas Kluyver Min RK
Jörgen Stenarson
Collaborator

This is work in progress that needs some feedback

os.system seems to require a str parameter, unicode is converted using ascii.

How should we handle this in a python3 compatible way? Should we extract system_raw to utils/py3compat.py?

Thomas Kluyver
Owner

I expect Python 3 os.system will want unicode. If we know we're always starting with unicode, put it through py3compat.unicode_to_str (which encodes on Python 2 only). If the input can be either unicode or bytes on Python 2, use py3compat.cast_bytes_py2. There's a list of what's in py3compat here: http://wiki.ipython.org/Py3compat_module

Jörgen Stenarson
Collaborator
Thomas Kluyver
Owner

Looks sensible to me - thanks, Jörgen. I guess there isn't a good way to test this, because it would rely on the existence of a particular network share.

I'll merge this soon, unless anyone objects or beats me to it.

Min RK
Owner

We should definitely add a unittest that just makes a simple !føø call, to protect from future failures to tackle unicode. The UNC share is a separate issue that is impossible to test, and we just have to be diligent (which I apparently failed to do, because while I did test on UNC shares, I do not have any non-ascii unicode shares).

Min RK
Owner

Also note that this bug affects all platforms, so both calls to os.system should be protected.

Jörgen Stenarson
Collaborator

I have also added the conversion to the non-windows code-path

Thomas Kluyver takluyver merged commit b206d90 into from
Thomas Kluyver
Owner

Thanks. Merged, with a tiny fix for Python 3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Nov 16, 2011
  1. Quick fix for os.system requiring str parameter

    jstenar authored
  2. Use unicode_to_str from py3compat

    J�rgen Stenarson authored
Commits on Nov 17, 2011
  1. Add simple test for non-ascii characters in system_raw call.

    J�rgen Stenarson authored
This page is out of date. Refresh to see the latest.
2  IPython/core/interactiveshell.py
View
@@ -2082,8 +2082,10 @@ def system_raw(self, cmd):
with AvoidUNCPath() as path:
if path is not None:
cmd = '"pushd %s &&"%s' % (path, cmd)
+ cmd = py3compat.unicode_to_str(cmd)
ec = os.system(cmd)
else:
+ cmd = py3compat.unicode_to_str(cmd)
ec = os.system(cmd)
# We explicitly do NOT return the subprocess status code, because
8 IPython/core/tests/test_interactiveshell.py
View
@@ -220,3 +220,11 @@ def test_1(self):
"""Test safe_execfile with non-ascii path
"""
_ip.shell.safe_execfile(self.fname, {}, raise_exceptions=True)
+
+
+class TestSystemRaw(unittest.TestCase):
+ def test_1(self):
+ """Test system_raw with non-ascii cmd
+ """
+ cmd = ur'''python -c "u'åäö'" '''
+ _ip.shell.system_raw(cmd)
Something went wrong with that request. Please try again.