[Python3]subprocess.check_output() 在python3的输出为bytes而非string,在实际使用过程中得增加一个解码过程decode(),不然会有问题

按以往python2的习惯编码输出报错

 1 #-*- coding:utf-8 -*-
 2 ‘‘‘
 3 Created on 2018年7月21日
 4
 5 @author: lenovo
 6 ‘‘‘
 7 import os
 8 import sys
 9 import subprocess
10 from uiautomator import device as d
11 cmd = r‘adb install F:\听力.apk‘
12 info = subprocess.check_output(cmd).split("\r\n")
13 print (info)

输出如下,报错

1 Traceback (most recent call last):
2   File "C:\Users\lenovo\eclipse-workspace\WOO\src\debug\debug1.py", line 12, in <module>
3     info = subprocess.check_output(cmd).split("\r\n")
4 TypeError: a bytes-like object is required, not ‘str‘

查询python3文档有下面描述:

By default, this function will return the data as encoded bytes. The actual encoding of the output data may depend on the command being invoked, so the decoding to text will often need to be handled at the application level.

也就是说,返回的其实是一个编码后的比特值,实际的编码格式取决于调用的命令,因此python3将解码过程交给应用层,也就是我们使用的人来做啦。

证实过程是不是这样,我们把这个subprocess.check_output()的类型打印出来如下,确实为bytes类型,需要人为再转换一次为string

 1 #-*- coding:utf-8 -*-
 2 ‘‘‘
 3 Created on 2018年7月21日
 4
 5 @author: lenovo
 6 ‘‘‘
 7 import os
 8 import sys
 9 import subprocess
10 from uiautomator import device as d
11 cmd = r‘adb install F:\听力.apk‘
12 info = subprocess.check_output(cmd)
13 print (type(info))

输出如下:

<class ‘bytes‘>

正确的如下:

 1 #-*- coding:utf-8 -*-
 2 ‘‘‘
 3 Created on 2018年7月21日
 4
 5 @author: lenovo
 6 ‘‘‘
 7 import os
 8 import sys
 9 import subprocess
10 from uiautomator import device as d
11 cmd = r‘adb install F:\听力.apk‘
12 info = subprocess.check_output(cmd)
13 info1 = info.decode()
14 print (info1.split(‘\r\n‘))

输出如下:

[‘Success‘, ‘‘]

原文地址:https://www.cnblogs.com/51study/p/9347672.html

时间: 2024-11-06 03:48:40

[Python3]subprocess.check_output() 在python3的输出为bytes而非string,在实际使用过程中得增加一个解码过程decode(),不然会有问题的相关文章

python3中的编码与解码原理

先看代码 >>> a = '中文' >>> a '中文' >>> print(a) 中文 >>> b = 'English' >>> b 'English' >>> print(b) English 解释编码和解码的过程 >>> aa = a.encode('utf-8') >>> aa b'\xe4\xb8\xad\xe6\x96\x87' >>&g

python3报错:TypeError: can&#39;t concat bytes to str

有时会报错这个:TypeError: Can't convert 'bytes' object to str implicitly 解决方法:使用字节码的decode()方法. 示例: str = 'I am string' byte = b' I am bytes' s = str + byte print(s) 这时会报错:TypeError: Can't convert 'bytes' object to str implicitly 解决方法: s = str + byte.decode

【Python3】Centos7 安装Python3.7

如果电脑自带的python2.7 先卸载 1.强制删除已安装python及其关联 rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps 2.删除残余文件 whereis python|xargs rm -frv 开始安装pyton3 1.安装编译 以及 相关的工具 yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel opens

【转】MFC中调试过程中查看输出信息 -- 不错

原文网址:http://blog.sina.com.cn/s/blog_4e24d9c501014o39.html 笔记&&方便查阅. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

把数据输出到Word (非插件形式)

项目开发过程中,我们要把数据以各种各样的形式展现给客户.把数据以文档的形式展现给客户相信是一种比较头疼的问题,如果没有好的方法会 使得我的开发繁琐,而且满足不了客户的需求.接下来我会通过两种开发方式介绍如何将数据输出到Word 文档上.我会分两篇文章介绍,第一篇 介绍不使用插件的情况下操作word,第二篇文章将介绍一种强大的插件操作word.下面开始第一篇文章.[本次实例源代码从这里下载] 文章梗概: ? 不使用模板将数据输出到 word ? 输出数据到 word 在后端设置输出内容 ? 输出数

Windows平台下Oracle监听服务启动过程中日志输出

Windows平台下Oracle监听服务启动过程中日志输出记录. 日志目录:D:\app\Administrator\diag\tnslsnr\WIN-RU03CB21QGA\listener\trace\listener.log 日志输出内容: Sat Aug 06 20:38:44 2016 系统参数文件为D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora 写入d:\app\administrator

Windows平台下Oracle实例启动过程中日志输出

Windows平台下Oracle实例启动过程中日志输出记录. 路径:D:\app\Administrator\diag\rdbms\orcl\orcl\trace\alert_orcl.log 输出内容: Sat Aug 06 20:39:55 2016 Starting ORACLE instance (normal) LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 Picked latch-free SCN scheme 3 Usin

请实现一个函数,把字符串中的每一个空格替换成“%20”,比如输入 “We are Happly。” 则输出“we%20are%20happy。”

请实现一个函数,把字符串中的每一个空格替换成"%20",比如输入 "We are Happly."  则输出"we%20are%20happy. " void ReplaceBlank(char String[],int length) { //originalLength 为字符串string的实际长度 //length字符串的总容量 int originalLength  = 0; int numberOfBlank = 0; int i =

(转)理解YOLOv2训练过程中输出参数含义

最近有人问起在YOLOv2训练过程中输出在终端的不同的参数分别代表什么含义,如何去理解这些参数?本篇文章中我将尝试着去回答这个有趣的问题. 刚好现在我正在训练一个YOLOv2模型,拿这个真实的例子来讨论再合适不过了,下边是我训练中使用的 .cfg 文件(你可以在cfg文件夹下找到它): 以下是训练过程中终端输出的一个截图: 以上截图显示了所有训练图片的一个批次(batch),批次大小的划分根据我们在 .cfg 文件中设置的subdivisions参数.在我使用的 .cfg 文件中 batch =