Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Quick fix for os.system requiring str parameter #1005

Merged
merged 3 commits into from

3 participants

@jstenar
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?

@takluyver
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

@jstenar
Collaborator
@takluyver
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.

@minrk
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).

@minrk
Owner

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

@jstenar
Collaborator

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

@takluyver takluyver merged commit b206d90 into ipython:master
@takluyver
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.
View
2  IPython/core/interactiveshell.py
@@ -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
View
8 IPython/core/tests/test_interactiveshell.py
@@ -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.