tl;dr: Python 3 occasionally splits argv
in weird places, unlike Python 2.
The discussion originally arose on the Git mailing list. After brief googling I was unable to find any documentation on the topic.
print_argv.py
:
import sys
from pprint import pprint
pprint(sys.argv)
test.py
:
import sys
import subprocess
subprocess.check_call([
'python%s' % sys.argv[1],
'./print_argv.py',
'similarity index 90%\nrename from file1.txt\nrename to file1-mv.txt\nindex 2bef330..f8fd673 100644\n',
])
Python 2, expected behavior:
$ python3 test.py 2
['./print_argv.py',
'similarity index 90%\nrename from file1.txt\nrename to file1-mv.txt\nindex 2bef330..f8fd673 100644\n']
Python 3, broken behavior:
$ python3 test.py 3
['./print_argv.py',
'similarity index 90%\n'
'rename from file1.txt\n'
'rename to file1-mv.txt\n'
'index 2bef330..f8fd673 100644\n']
The same directly via shell. Python 2, expected behavior:
$ python2 print_argv.py 'similarity index 90%\nrename from file1.txt\nrename to file1-mv.txt\nindex 2bef330..f8fd673 100644\n'
['print_argv.py',
'similarity index 90%\\nrename from file1.txt\\nrename to file1-mv.txt\\nindex 2bef330..f8fd673 100644\\n']
Python 3, very broken behavior:
$ python3 print_argv.py 'similarity index 90%\nrename from file1.txt\nrename to file1-mv.txt\nindex 2bef330..f8fd673 100644\n'
['print_argv.py',
'similarity index 90%\\nrename from file1.txt\\nrename to '
'file1-mv.txt\\nindex 2bef330..f8fd673 100644\\n']
Is this argv
-splitting behavior a bug?