gpt4 book ai didi

python - 从 subprocess.run 解码 Python 中的特殊字符

转载 作者:太空宇宙 更新时间:2023-11-03 21:37:26 25 4
gpt4 key购买 nike

Python版本:3.7
操作系统:Server 2008 r2 - 充当 AD 服务器

我正在运行一个 python 脚本,使用以下代码通过 cmd 进行 dsquery 查找:

import subprocess
instruction = "dsquery user domainroot -samid 18129"
output = subprocess.run(instruction, stdout=subprocess.PIPE, shell=True)

然后为了得到我运行的结果:

result = str(output.stdout.decode('ISO-8859-1'))

result = str(output.stdout.decode('utf-8'))

我两种都试过了。一般来说,这工作得很好,我没有任何问题。我通常会得到如下所示的结果

"CN=Joe Soap,OU=Students,dc=khs,dc=edu"

但在我的网络中,在少数情况下,用户的名称中包含不寻常的字符,例如 éë,我会遇到错误。假设名字为Joé Soap

当使用 UTF-8 解码时,我得到

"CN=Jo\x82 Soap,OU=Students,dc=khs,dc=edu"

通过 ISO-8859-1,我明白了

"CN=Jo? Soap,OU=Students,dc=khs,dc=edu"

最后,如果我直接运行 cmd 命令,我会得到正确的响应:

"CN=Joé Soap,OU=Students,dc=khs,dc=edu"

我在这里缺少什么?除了上面提到的两种编码之外,我是否应该使用特定的编码(我已经尝试了其他几种编码但没有成功),或者我在这个过程中遗漏了一些东西?

最佳答案

我认为这更像是一种解决方法,但为什么不使用 Popen 而不是 run?

def start_process(command=''):
return subprocess.Popen(command.split(' '), stdout=subprocess.PIPE, shell=False, creationflags = 0x08000000)

command = start_process('string that you would normally put in cmd window')

result_string = str(command.communicate()[0])

虽然有点啰嗦,但最终可能会更容易使用

关于python - 从 subprocess.run 解码 Python 中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53154446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com