python 如何在不进行任何操作的情况下将字节作为输入?
How to take bytes as input without any manipulation in it in python?
我正在将一个字节作为输入
b'\xe2I4\xdd\r\xe5\xfcy^4\xd5'
但它被转换成字符串。
所以当我试图将这个字符串转换为字节时,它再次操纵它并给我输出:
b"b'\xe2I4\xdd\r\xe5\xfcy^4\xd5'"
我想要的输出是,当我提供 b'\xe2I4\xdd\r\xe5\xfcy^4\xd5' 时,它会按原样将其转换为字节,而无需对其进行操作或添加任何字符或符号。
任何资源或参考资料都会有所帮助。
提前致谢
坏主意
您可以将 input()
的值传递给 eval()
函数。函数 eval()
直接计算一个字符串,就好像它直接在 Python 中执行一样。虽然一开始它可能感觉像是一个最好的功能,但由于同样的原因,在任何生产级应用程序中使用它几乎 不安全 ,因为,用户可以执行任何代码使用这可能会导致很多问题。
更好的选择
您可以使用比 eval()
更安全的替代方法,即 ast.literal_eval()
。此函数将给定字符串评估为 Python 文字 (如字符串、数字、字节对象等)。如果字符串不包含任何文字 (如函数调用、对象创建、赋值等),此函数将抛出错误。够了,让我们看看如何让它工作。
import ast
user_input = input()
eval_expr = ast.literal_eval(user_input)
如果要检查输入是否为 bytes
文字,可以使用 isinstance
函数进行检查,然后执行所需的操作。
# Optional: Handle if `eval_expr` is not a `bytes` literal
if not isinstance(eval_expr, bytes):
...
因此,您需要做的就是首先导入模块 ast
。然后接受用户的输入。此后将此输入字符串传递给 ast.literal_eval()
函数以评估字符串。
我正在将一个字节作为输入 b'\xe2I4\xdd\r\xe5\xfcy^4\xd5'
但它被转换成字符串。
所以当我试图将这个字符串转换为字节时,它再次操纵它并给我输出:
b"b'\xe2I4\xdd\r\xe5\xfcy^4\xd5'"
我想要的输出是,当我提供 b'\xe2I4\xdd\r\xe5\xfcy^4\xd5' 时,它会按原样将其转换为字节,而无需对其进行操作或添加任何字符或符号。
任何资源或参考资料都会有所帮助。
提前致谢
坏主意
您可以将 input()
的值传递给 eval()
函数。函数 eval()
直接计算一个字符串,就好像它直接在 Python 中执行一样。虽然一开始它可能感觉像是一个最好的功能,但由于同样的原因,在任何生产级应用程序中使用它几乎 不安全 ,因为,用户可以执行任何代码使用这可能会导致很多问题。
更好的选择
您可以使用比 eval()
更安全的替代方法,即 ast.literal_eval()
。此函数将给定字符串评估为 Python 文字 (如字符串、数字、字节对象等)。如果字符串不包含任何文字 (如函数调用、对象创建、赋值等),此函数将抛出错误。够了,让我们看看如何让它工作。
import ast
user_input = input()
eval_expr = ast.literal_eval(user_input)
如果要检查输入是否为 bytes
文字,可以使用 isinstance
函数进行检查,然后执行所需的操作。
# Optional: Handle if `eval_expr` is not a `bytes` literal
if not isinstance(eval_expr, bytes):
...
因此,您需要做的就是首先导入模块 ast
。然后接受用户的输入。此后将此输入字符串传递给 ast.literal_eval()
函数以评估字符串。