由于Python 3k引入了字符串和字节之间的严格区分,因此数组sys.argv中的命令行参数显示为字符串.有时需要将参数视为字节,例如,在传递不需要在Unix中的任何特定字符编码的路径时.
我们来看一个例子吧.下面是一个简短的Python 3k程序argv.py:
import sys
print(sys.argv[1])
print(b'bytes')
Run Code Online (Sandbox Code Playgroud)
当它执行python3.1 argv.py français时产生预期的输出:
法语
b'bytes'
请注意,参数français是我的语言环境编码.但是,当我们以不同的编码传递参数时,我们会得到一个错误:python3.1 argv.py `echo français|iconv -t latin1`
Traceback (most recent call last):
File "argv.py", line 3, in <module>
print(sys.argv[1])
UnicodeEncodeError: 'utf-8' codec can't encode character '\udce7' in position 4: surrogates not allowed
Run Code Online (Sandbox Code Playgroud)
我们如何通过命令行参数将二进制数据传递给Python 3k程序?使用示例是将路径传递给使用其他语言环境的用户的文件.