【问题标题】:How to get the output of subprocess.check_output() python module?如何获取 subprocess.check_output() python 模块的输出?
【发布时间】:2014-02-24 12:56:33
【问题描述】:

我正在尝试从 python 中的命令提示符(CMD - Windows)获取信息,使用这样的模块子进程:

ipconfig = subprocess.check_output("ipconfig")
print(ipconfig)

结果是:

b'\r\nWindows IP Configuration\r\n\r\n\r\nEthernet adapter Local Area Connect:\r\n\r\n   Connection-specific DNS Suffix  . : XX.XXX\r\n   IPv4 address. . . . . . . . . . . : XXXXXXXXX\r\n   Subnet Mask . . . . . . . . . . . : XXXXXXXXXX\r\n   Default Gateway . . . . . . . . . : XXXXXX\r\n'

我已阅读 module subprocess 上的文档,但没有找到适合我的问题的任何内容。

我需要格式良好的字符串中的这些信息......不是这样,我该怎么办?

(我认为这里的问题是字符串格式,但是如果您有无需字符串格式即可获得良好输出的提示,我很感激)

我知道我可以通过socket模块获取IP地址,但我只是举个例子。

【问题讨论】:

  • 你想要什么样的“漂亮的格式”?你所拥有的是ipconfig 的文字输出,它是格式化的,以...开始......
  • @martijn 回答的那个,提示的“真实”结果。

标签: python windows string python-3.x subprocess


【解决方案1】:

您正在打印一个bytes 字符串值,而print() 使用repr() 将其转换为一个Unicode 字符串。您想将值解码为 un​​icode:

import sys

print(ipconfig.decode(sys.stdout.encoding))

这使用控制台的编码来解释命令输出。

【讨论】:

  • 哇!效果很好,我会研究解码、标准输出、编码方法……非常感谢
  • 为什么你更喜欢 sys.stdout.encoding 而不是 sys.getfilesystemencoding()sys.stdout 在某些情况下可以None
  • @Kentzo:sys.getfilesystemencoding() 是错误的编解码器;您的文件系统和终端不必使用相同的编码..
猜你喜欢
  • 2014-09-11
  • 2017-01-19
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 2018-12-26
  • 2015-09-04
  • 1970-01-01
相关资源
最近更新 更多