打印的 python 变量不等于变量值

Printed python variable does not equal variable value

我有一个 python 脚本,它使用子进程调用 php 函数。 php 脚本的输出被捕获为一个变量以供进一步使用。在分析存储的变量时,我发现如果我打印变量,它的值与变量本身不同,我不明白为什么。我正准备让自己感到尴尬,所以请赐教。

是的,这个虚构示例中的密码是 "password"

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 表示零。

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