在Python 3中将sys.argv作为字节访问

时间:2014-11-28 09:15:19

标签: python python-3.x

正如标题所说,python 3中是否有sys.argv等价物允许我将参数作为字节读取?

我想要的原因是,我有一个脚本接受一个字节(\ xe9 \ x88 ...)作为它的第一个arg,第一个arg应该是从utf8字符串转换的字节,sys.argv将尝试使用某些编码解码第一个arg,这可能不是utf8,因此程序可能会失败。如果我可以在不调用sys.argv的情况下访问args,则不会进行转换。

1 个答案:

答案 0 :(得分:12)

关于此问题有一个issue on the Python bug tracker

  

在某些情况下,命令行的编码不正确或   未知。 sys.argv用文件系统编码解码即可   是错的。例如。问题#4388(好吧,这是一个错误,应该修复)。

     

作为os.environb,拥有sys.argv的字节版本会很有用   能够决定用于解码每个参数的编码,或者   如果我们不关心编码,就要操纵字节。

由于在Python 3 sys.argv上使用文件系统编码进行编码,因此建议的错误解决方案是使用os.fsencode

argvb = list(map(os.fsencode, sys.argv))

os.fsencode使用surrogateescape编码使用字符串对字符串进行编码,该编码在PEP-383中定义。