0

我有一个使用 popen() 的函数,它将标准输出作为数组返回。

使用 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'']

这个“你”来自哪里,我该如何预防?

4

4 回答 4

1

u代表 unicode 表示它在打印时是一个 unicode 字符串。它不会以任何方式影响数组内容,只是一个指示

于 2013-11-03T12:10:20.570 回答
1

u'10-000801d5a12d'表示 '10-000801d5a12d' 是一个unicode字符串。

您可以在python 文档中看到它

利用:

str(myString)

encode如果您需要特定的编码,您也可以使用:

"myString".encode('utf-8')
于 2013-11-03T12:10:25.123 回答
1

指示字符串是uUnicode 字符串。这意味着字符串已从编码(例如 UTF-8 或 ISO-8895-1)解码为明确的类型。如果您print arr[0]在没有u.

这将在.read().decode(). 您应该真正传递正确的文件编码来解码,否则可能会使用可能不合适的系统。如果您的文件只包含 ASCII 字符,那么您不会看到问题。

之所以不同,是因为在 Python 3 中,普通字符串(已解码)始终是 Unicode 字符串,而字节字符串(from .read())是一种特殊类型。

如果您真的不想要u,请删除该.decode()方法,但您确实不需要。

于 2013-11-03T12:25:19.883 回答
0

u意味着该字符串是一个 unicode 字符串。如果你真的想要一个 python str,你可以这样转换它:

str(my_var)
于 2013-11-03T12:10:56.300 回答