讨论最初是在on the Git mailing list开始的。在短暂的谷歌搜索之后,我找不到任何关于这个主题的文档。你知道吗
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,预期行为:
$ 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,破坏行为:
$ 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']
直接通过shell实现。Python 2,预期行为:
$ 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']
Python3,非常坏的行为:
$ 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']
这种分裂行为是错误吗?你知道吗
我已经弄明白了。这不是bug,而是
pprint()
的特性。它分割字符串以避免长行,并且滥用了在Python中用空格分割的字符串由解析器连接的事实。你知道吗另外,在我的示例中,换行符在shell中没有正确解析。逃离它们,我得到与
subprocess.check_call()
中完全相同的行为:一个关于同一主题的问题:Can I make pprint in python3 not split strings, like in python2?
相关问题 更多 >
编程相关推荐