首页 > 解决方案 > 打印的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'}

标签: python-3.xpdb

解决方案


subprocess.get_output()正在返回一个字节字符串,但 Python 将其识别为字符串。所以你需要先.encode()那个然后decode()它:

>>> '\x00p\x00a\x00s\x00s\x00w\x00o\x00r\x00d'.encode().decode('utf_16_be')
'password'

它以 UTF-16 BE 编码,它为每个字符提供两个字节,因此\x00为零。

您可以调整语言环境或以其他方式操纵编码以正确识别字符串。


推荐阅读