程序应输出在用户控制台中执行的结果,并通过邮件将结果发送给我。控制台上的命令可以正常工作,但“ ipconfig”除外。
正常工作的代码:
import subprocess, time, os, smtplib, re
from subprocess import check_output
serverIP = "iperf.net.ru"
def startShell(serverIP):
"""Start windows command line, measuring Internet channel"""
print("Measuring external channel, please wait...")
try:
information = check_output("iperf3 -c %s -i 11" % serverIP, shell = True).decode()
return information
except:
print("There was an error connecting to the server!")
发生错误的代码:
def netSettings():
"""Show network settings"""
try:
netSet = check_output("ipconfig", shell = True).decode()
return netSet
except:
print("An error occurred while displaying the settings!")
错误类型:
>>> netSet = check_output("ipconfig", shell = True).decode()
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
netSet = check_output("ipconfig", shell = True).decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8d in position 2: invalid start byte
不带解码功能()的输出
>>> netSet = check_output("ipconfig", shell = True)
>>> print(netSet)
b'\r\n\x8d\xa0\xe1\xe2\xe0\xae\xa9\xaa\xa0 \xaf\xe0\xae\xe2\xae\xaa\xae\xab\xa0 IP
真的很期待您的建议!诚实地在询问之前搜索了论坛!
答案 0 :(得分:0)
似乎check_output的返回未使用utf-8编码。这是您可以尝试放入decode
中的标准编码的列表:https://docs.python.org/3/library/codecs.html
答案 1 :(得分:0)
用于捕获输出的外壳使用cp866
的俄语OEM编码,因此您可能使用的是俄语本地化版本的Windows:
b = b'\r\n\x8d\xa0\xe1\xe2\xe0\xae\xa9\xaa\xa0 \xaf\xe0\xae\xe2\xae\xaa\xae\xab\xa0 IP'
print(b.decode('cp866'))
输出:
Настройка протокола IP
您可以在chcp
之前解析ipconfig
的输出以获取代码页。
答案 2 :(得分:-1)
netSet = check_output("ipconfig", shell = True).decode(encoding="866")
马克·托洛宁(Mark Tolonen)帮助我解决了这个问题!