diff --git a/IPython/core/magics/osm.py b/IPython/core/magics/osm.py index 5d1b618..4cd2f86 100644 --- a/IPython/core/magics/osm.py +++ b/IPython/core/magics/osm.py @@ -816,8 +816,11 @@ class OSMagics(Magics): The file will be overwritten unless the -a (--append) flag is specified. """ args = magic_arguments.parse_argstring(self.writefile, line) - filename = os.path.expanduser(args.filename) - + if re.match(r'[\'*\']|["*"]', args.filename): + filename = os.path.expanduser(args.filename[1:-1]) + else: + filename = os.path.expanduser(args.filename) + if os.path.exists(filename): if args.append: print("Appending to %s" % filename) diff --git a/IPython/core/tests/test_magic.py b/IPython/core/tests/test_magic.py index b9c1533..962dedd 100644 --- a/IPython/core/tests/test_magic.py +++ b/IPython/core/tests/test_magic.py @@ -27,7 +27,8 @@ from IPython.core.magics import execution, script, code, logging from IPython.testing import decorators as dec from IPython.testing import tools as tt from IPython.utils.io import capture_output -from IPython.utils.tempdir import TemporaryDirectory +from IPython.utils.tempdir import (TemporaryDirectory, + TemporaryWorkingDirectory) from IPython.utils.process import find_cmd @@ -797,7 +798,20 @@ def test_file_amend(): s = f.read() nt.assert_in('line1\n', s) nt.assert_in('line3\n', s) - + +def test_file_spaces(): + """%%file with spaces in filename""" + ip = get_ipython() + with TemporaryWorkingDirectory() as td: + fname = "file name" + ip.run_cell_magic("file", '"%s"'%fname, u'\n'.join([ + 'line1', + 'line2', + ])) + with open(fname) as f: + s = f.read() + nt.assert_in('line1\n', s) + nt.assert_in('line2', s) def test_script_config(): ip = get_ipython()