我有这段代码:
netshcmd = subprocess.Popen('netsh wlan stop hostednetwork', shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
output, errors = netshcmd.communicate()
if errors:
print("Warrning: ", errors)
else:
print("Success", output)
输出是这样的:
Success b'The hosted network stopped. \r\n\r\n'
如何获得这样的输出"成功托管网络停止了。"?
答案 0 :(得分:2)
从子进程读取会为您提供 bytestring 。您可以解码此字节字符串(您必须找到合适的编码),或使用universal_newlines
选项并让Python自动为您解码:
netshcmd = subprocess.Popen(
'netsh wlan stop hostednetwork',
shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE,
universal_newlines=True)
来自Frequently Used Arguments documentation section:
如果 universal_newlines 为
True
,则这些文件对象将使用locale.getpreferredencoding(False)
返回的编码以通用换行模式打开为文本流。对于stdin
,输入中的行结束字符'\n'
将转换为默认行分隔符os.linesep
。对于stdout
和stderr
,输出中的所有行结尾都将转换为'\n'
。有关更多信息,请参阅io.TextIOWrapper
类的文档,当其构造函数的换行参数为None
时。
对于通过shell运行的进程,locale.getpreferredencoding(False)
应该正好使用正确的编解码器,因为它从与其他进程完全相同的位置获取有关使用的编码的信息像netsh
那样应该咨询locale environment variables。
使用universal_newlines=True
,output
将设置为字符串'The hosted network stopped. \n\n'; note the newlines at the end. You may want to use
str.strip()`以删除那里的额外空格:
print("Success", output.strip())
答案 1 :(得分:0)
这是一个字节串。更改您的代码以使其成为str:
netshcmd = subprocess.Popen('netsh wlan stop hostednetwork', shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
output, errors = netshcmd.communicate()
if errors:
print("Warrning: ", errors.decode())
else:
print("Success", output.decode())