将字节串转义为 bytestring
Escaped string of bytes to bytestring
我是 Python 的新手,我需要从命令行参数中读取字节串。我正在使用 Python 3.4.
目前,我正在使用 argparse 解析参数,数据配置如下:parser.add_argument("-d", "--data", default=b'[=10=]')
当我用 -d 参数调用我的程序时(例如 python myprogram.py -d b'd\x00!\x00W\x00'
),它将 -d 的值解释为一个字符串,转义斜杠并将 'b' 视为字符串的一部分,像这样:'b\'d\x00!\x00W\x00\''
有没有办法将 argparse 的输出转义并转换为字节?
您通常会让 shell 制定确切的字节,但由于您 cannot pass in NUL bytes as arguments 要求用户输入转义序列是一个合理的解决方法。
但是,shell 不会解释 Python 字节字符串文字表示法。
在这种情况下,我会要求用户输入 十六进制 值:
python myprogram.py -d "64 00 21 00 57 00"
并使用 binascii.unhexlify()
function 从中生成你的 bytes
值(首先删除所有空格):
whitespace = dict.fromkeys((9, 10, 13, 32)) # tab, space, newline and carriage return
data = binascii.unhexlify(args.data.translate(whitespace))
这确实需要您将默认参数值设置为兼容值:
parser.add_argument("-d", "--data", default='00')
另一种方法是使用 ast.literal_eval()
function 来解释 Python 字节字符串文字语法:
data = ast.literal_eval(args.data)
你的默认值是:
parser.add_argument("-d", "--data", default=repr(b'[=14=]'))
但考虑到此函数接受任何 Python 文字,因此您最终可能会得到任何其他对象类型,包括数字、字符串和容器。
我是 Python 的新手,我需要从命令行参数中读取字节串。我正在使用 Python 3.4.
目前,我正在使用 argparse 解析参数,数据配置如下:parser.add_argument("-d", "--data", default=b'[=10=]')
当我用 -d 参数调用我的程序时(例如 python myprogram.py -d b'd\x00!\x00W\x00'
),它将 -d 的值解释为一个字符串,转义斜杠并将 'b' 视为字符串的一部分,像这样:'b\'d\x00!\x00W\x00\''
有没有办法将 argparse 的输出转义并转换为字节?
您通常会让 shell 制定确切的字节,但由于您 cannot pass in NUL bytes as arguments 要求用户输入转义序列是一个合理的解决方法。
但是,shell 不会解释 Python 字节字符串文字表示法。
在这种情况下,我会要求用户输入 十六进制 值:
python myprogram.py -d "64 00 21 00 57 00"
并使用 binascii.unhexlify()
function 从中生成你的 bytes
值(首先删除所有空格):
whitespace = dict.fromkeys((9, 10, 13, 32)) # tab, space, newline and carriage return
data = binascii.unhexlify(args.data.translate(whitespace))
这确实需要您将默认参数值设置为兼容值:
parser.add_argument("-d", "--data", default='00')
另一种方法是使用 ast.literal_eval()
function 来解释 Python 字节字符串文字语法:
data = ast.literal_eval(args.data)
你的默认值是:
parser.add_argument("-d", "--data", default=repr(b'[=14=]'))
但考虑到此函数接受任何 Python 文字,因此您最终可能会得到任何其他对象类型,包括数字、字符串和容器。