python-3.x - 打印的python变量不等于变量值
问题描述
我有一个 python 脚本,它使用子进程调用一个 php 函数。php 脚本的输出被捕获为变量以供进一步使用。在分析存储的变量时,我发现如果我打印变量,它的值与变量本身不同,我不明白为什么。我正准备让自己感到尴尬,所以请赐教。
是的,这个虚构示例中的密码是“密码”
cmd = "/usr/bin/php -f /opt/hello_world.php {} {}".format(encrypted_password,of_secret)
decrypted_password = subprocess.getoutput(cmd)
print(decrypted_password)
pdb.set_trace()
在 pdb 这里是输出
password
(Pdb) decrypted_password
'\x00p\x00a\x00s\x00s\x00w\x00o\x00r\x00d'
(Pdb) print(decrypted_password)
password
(Pdb) locals()
{'cmd': '/usr/bin/php -f /opt/hello_world.php f2e57ba074b3c3d8d4d010bcff13083dc5928107f8cfbfaa4a52fff0155eebe5 JqiRnKJBaSwEOCI', 'decrypted_password': '\x00p\x00a\x00s\x00s\x00w\x00o\x00r\x00d'}
解决方案
subprocess.get_output()
正在返回一个字节字符串,但 Python 将其识别为字符串。所以你需要先.encode()
那个然后decode()
它:
>>> '\x00p\x00a\x00s\x00s\x00w\x00o\x00r\x00d'.encode().decode('utf_16_be')
'password'
它以 UTF-16 BE 编码,它为每个字符提供两个字节,因此\x00
为零。
您可以调整语言环境或以其他方式操纵编码以正确识别字符串。
推荐阅读
- autodesk-forge - 使用特定设置从 Forge 中的 revit 文件导出 ifc 文件
- python - 登录 Python/Django 未按预期工作
- html - 具有列过滤但宽度与没有相同的数据表
- javascript - Node.js + express如何将字符串添加到请求url?
- excel - 如何将表格的特定部分从工作表复制到另一个工作表
- python - 如何在公共列表中列出每个循环中的输出值?
- c# - Asp.NET 核心项目因 NETSDK1061 失败:项目已使用 Microsoft.NETCore.App 版本恢复
- python - 如何根据指定值对列进行分组并进一步对另一列进行分组并对它们进行计数(Pandas Python)
- c# - C# 7.3 中不提供“使用声明”功能。请使用语言版本 8.0 或更高版本 - 在一台机器上出错,但在另一台机器上工作
- html - :before 伪元素不在 div 中