2013-11-03 2 views
0

stdout을 배열로 반환하는 popen()을 사용하는 함수가 있습니다. Python3 께 배열을 사용파이썬 배열 요소 앞에 'u'가 붙습니다.

어디에있는 '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' ']로 정확하게 복귀되지만, 파이썬 2.7 아래의 각 요소는 접두어 이 'u'가 나오고 어떻게 막을 수 있습니까?

+0

당신은 그것을 막지 못합니다. 목록을 인쇄하면 값이 아닌 내용의 표현이됩니다. – Matthias

+1

부분적으로 만 뺨을 때리는 답변 - Python 3.x를 전환하여 방지하십시오! 제가 아는 한, 3.x 이전의 Python에 대한 최악의 점은 문자열의 유니 코드 지원이었습니다. – rlms

답변

1

는 문자열이 유니 코드 문자열을 나타냅니다. 즉, 문자열이 UTF-8 또는 ISO-8895-1과 같은 인코딩에서 모호하지 않은 형식으로 디코딩 된 것입니다. print arr[0] 인 경우 u없이 터미널에 다시 인코딩됩니다.

이것은 .read().decode() 동안 발생했을 것입니다. 적절한 파일 인코딩을 전달하여 디코딩해야합니다. 그렇지 않으면 적절하지 않은 시스템을 사용할 수 있습니다. 파일에 ASCII 문자 만 있으면 문제가 표시되지 않습니다.

파이썬 3에서는 일반 문자열 (디코 드)이 항상 유니 코드 문자열이기 때문에 바이트 문자열 (.read())은 특수 유형이기 때문에 다른 이유가 있습니다.

u을 정말로 원하지 않는 경우 .decode() 메서드를 제거하지만 실제로는 필요하지 않습니다.

1

u은 인쇄 할 때 유니 코드 문자열임을 나타 내기 위해 유니 코드를 나타냅니다. 어떤 식 으로든 배열 내용에 영향을 미치지 않으며 단지 표시 일뿐입니다.

1

u'10-000801d5a12d' 의미는 '012 -010801d5a12d'는 unicode 문자열입니다.

당신은 파이썬 문서에 그것을 here을 볼 수 있습니다

사용 :

"myString".encode('utf-8') 
0

u 의미 문자열이있다 : 특정 인코딩을해야하는 경우

str(myString) 

또한 encode을 사용할 수 있습니다 유니 코드 문자열. 당신이 정말로 파이썬 str을 원하는 경우 , 당신은 그런 식으로 캐스팅 할 수 있습니다

u
str(my_var) 
관련 문제