我有一个使用popen()的函数,它将stdout作为数组返回。
使用Python3正确返回数组,但在python 2.7下,每个元素都以' u'
为前缀def exe(cmd):
from subprocess import Popen, PIPE, STDOUT
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
arr = p.stdout.read().decode().split("\n")
print(arr)
del arr[-1]
if(arr[0]=='not found.'): arr = [];
return arr
[u' 10-000801d5a12d',u'']
这是' u'来自,我该如何预防?
答案 0 :(得分:1)
u
代表unicode,表示打印时它是一个unicode字符串。它不会以任何方式影响数组内容,仅仅是一个指示
答案 1 :(得分:1)
u'10-000801d5a12d'
表示'10 -000801d5a12d'是unicode
字符串。
你可以在python docs
看到它here使用:
str(myString)
如果您需要特定的编码,也可以使用encode
:
"myString".encode('utf-8')
答案 2 :(得分:1)
u
表示字符串是Unicode字符串。这意味着字符串已从编码(例如UTF-8或ISO-8895-1)解码为明确类型。如果您print arr[0]
,则会在没有u
的情况下将其编码回您的终端。
这可能发生在.read().decode()
期间。您应该通过正确的文件编码来解码,否则可能会使用可能不合适的系统。如果您的文件只包含ASCII字符,那么您将看不到问题。
之所以不同,是因为在Python 3中,普通字符串(已解码)始终是Unicode字符串,而字节字符串(来自.read()
)是一种特殊类型。
如果你真的不想要u
,请删除.decode()
方法,但实际上并不需要。
答案 3 :(得分:0)
u
表示字符串是unicode字符串。
如果你真的想要一个python str
,你可以这样投射:
str(my_var)