如何将 subprocess.communicate() 转换为 utf-8 字符串?
How to convert subprocess.communicate() to utf-8 String?
我做了一个子流程,但是输出很奇怪:
(b'Ping: 3.425 ms\r\nDownload: 1167.08 Mbit/s\r\nUpload: 314.93 Mbit/s\r\n', None)
而我期待的是:
Ping: 3.425 ms
Download: 1167.08 Mbit/s
Upload: 314.93 Mbit/s
这是我的代码:
process = await asyncio.create_subprocess_exec("speedtest-cli", "--simple", stdout=asyncio.subprocess.PIPE)
output = await process.communicate()
print(output)
函数也必须是异步的。
如果您得到的输出是一个元组,您可以提取具有给定索引的元素:
>>> data = output[0]
b'Ping: 3.425 ms\r\nDownload: 1167.08 Mbit/s\r\nUpload: 314.93 Mbit/s\r\n'
并且您可以使用内置的 .decode()
方法对其进行解码:
>>> data = output[0].decode("utf-8")
Ping: 3.425 ms
Download: 1167.08 Mbit/s
Upload: 314.93 Mbit/s
参考:
Process.communicate()
- "Return a tuple (stdout_data, stderr_data)
".
您需要一个输出,因此是第一个元素,但您没有收到错误,因此是第二个元素。
我做了一个子流程,但是输出很奇怪:
(b'Ping: 3.425 ms\r\nDownload: 1167.08 Mbit/s\r\nUpload: 314.93 Mbit/s\r\n', None)
而我期待的是:
Ping: 3.425 ms
Download: 1167.08 Mbit/s
Upload: 314.93 Mbit/s
这是我的代码:
process = await asyncio.create_subprocess_exec("speedtest-cli", "--simple", stdout=asyncio.subprocess.PIPE)
output = await process.communicate()
print(output)
函数也必须是异步的。
如果您得到的输出是一个元组,您可以提取具有给定索引的元素:
>>> data = output[0]
b'Ping: 3.425 ms\r\nDownload: 1167.08 Mbit/s\r\nUpload: 314.93 Mbit/s\r\n'
并且您可以使用内置的 .decode()
方法对其进行解码:
>>> data = output[0].decode("utf-8")
Ping: 3.425 ms
Download: 1167.08 Mbit/s
Upload: 314.93 Mbit/s
参考:
Process.communicate()
- "Return a tuple(stdout_data, stderr_data)
".
您需要一个输出,因此是第一个元素,但您没有收到错误,因此是第二个元素。