Python subprocecess.Popen返回ascii值而不是字符

问题描述 投票:0回答:1

Python 3.8。我正在使用下面显示的代码执行OS程序。但是“输出”内容包含一个ASCII值列表,而不是相应的字符串字符。我知道我可以将这些ASCII值转换为字符,但是我确信必须有一种方法来获取字符串字符和/或字符行的输出。

p = subprocess.Popen(strCommand, shell=True, stdin=subprocess.PIPE, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, close_fds=True)
output, err = p.communicate()

任何想法?

python subprocess
1个回答
0
投票

communicate() returns a tuple (stdout_data, stderr_data). The data will be strings if streams were opened in text mode; otherwise, bytes.

猜测您正在调用list()上的output之类的东西,它将把字节转换为其ASCII序数。

Windows示例,其中strCommand == 'dir'

>>> output, err = p.communicate()
>>> output
b' Volume in drive C is OSDisk\r\n
>>> type(output)
<class 'bytes'>
>>> list(output[:10])
[32, 86, 111, 108, 117, 109, 101, 32, 105, 110]

如果需要str,请致电output.decode('<encoding>')

© www.soinside.com 2019 - 2024. All rights reserved.