Найти - Пользователи
Полная версия: Мигрировал на 3.2.2 и subprocess отдает b'строки' в консоль, почему?
Начало » Python для новичков » Мигрировал на 3.2.2 и subprocess отдает b'строки' в консоль, почему?
1
Immor+al
Например вывод команды ‘time /T’ будет:
b'10:55 AM\r\n'
Как сделать, чтобы не было мусора, а была только строка “10:55 AM”?

Реально у меня такой код:
def getBranchName():
process = subprocess.Popen('git symbolic-ref -q HEAD', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
(stdoutdata, stderrdata) = process.communicate()
current_branch = str(stdoutdata)
current_branch = current_branch.replace("refs/heads/","")
current_branch = current_branch.replace("\n","")
return current_branch
...
print("Branch: "+ getBranchName())
Возвращает: Branch: b'master\n'

На питоне 2.7.2 такой фигни не было!
У меня консольная тулза, а это сильно уродует вывод.
Immor+al
Я пробовал:
print(b“abcde”.decode(“utf-8”)) #Работает!
print(“UNCOMMITED FILES; Branch: ”+ str(getBranchName()).decode(“utf-8”)) #AttributeError: ‘str’ object has no attribute ‘decode’

Все остальные строки у меня стали юникодными автоматически, кроме этой, оказалось нужно не:
current_branch = str(stdoutdata)
а:
current_branch = str(stdoutdata, “utf-8”)

как сделать, чтобы скрипт поддерживался и 2 и 3 версией питона?
просто добавить if sys.version_info > (3, 0): else и выполнять только одну из строчек кода выше?
agalen
Одними только if…else здесь не обойтись - много несовместимых синтаксических конструкций. Да и мучения будут сплошные.
Для разработки советуют писать для версии 2, а для тройки - прогонять через 2to3.

http://wiki.python.org/moin/Python2orPython3
http://www.python.org/dev/peps/pep-3000/#id9
o7412369815963
2.7 -> 3.2
'xxx' -> b'xxx' # байты
u'xxx' -> ‘xxx’ # строки

идея такая:
1) при получении байтов из вне (process.communicate) переводите их в уникод строку,
2) работайте со строкой,
3) при отправке наружу (print) переводите строку в байты.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB