Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 11, 2014 14:18:06

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

subprocess и non-ASCII символы

_alexs_
Похоже решения таки нет
Что за глупость. Решение всегда есть и не требуется тут python3

Попробуйте немного шире посмотреть на проблему. Откуда вы берете строки которые скармливаете subprocess.Popen

Пример: у меня директория под виндой
Даша.bat
паша.bat
a.py
Файл целиком:
import subprocess as sp 
import glob
for i in glob.glob("*.bat"):
    sp.check_call(i)

Все прекрасно выполняется. Заметьте encoding файла питона не указан. Кодировка операционной системы не интересует. Это python2.7 а не трешка. Это windows.

Если надо трансформировать имена файлов под 2.x
1 отдавайте шаблоны в unicode и назад получите unicode.
glob.glob(u“*.bat”)
2. Если потребуются литералы заданные в коде укажите кодировку файла И задавайте литералы как unicode. u“даша.bat”



Отредактировано doza_and (Авг. 11, 2014 14:33:29)

Офлайн

#2 Авг. 11, 2014 23:54:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

subprocess и non-ASCII символы

_alexs_
У меня все файлы имеют кодировку utf-8, менять её на cp1251 не вариант.

Ну да, я это и имел в виду. Что файлы в utf-8 все, а в них, к примеру, комментарии со спецсимволами. utf-8 кодирует весь юникод, а cp1251 или cp866 кодирует лишь очень маленькую часть. Не будешь же менять весь проект на стиль прошлого века.

doza_and
Кодировка операционной системы не интересует. Это python2.7 а не трешка. Это windows.

Вот, осталось ещё из даша.bat вывести русский текст (в питон). :)



Отредактировано py.user.next (Авг. 11, 2014 23:55:04)

Офлайн

#3 Авг. 12, 2014 06:38:45

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

subprocess и non-ASCII символы

Зачем менять весь проект, можно в один отдельный модуль вывести именно эту функцию например, я к тому что не надо сразу ставить крест, решения всегда есть.

Офлайн

#4 Авг. 12, 2014 09:27:49

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

subprocess и non-ASCII символы

Kasta_neda
Зачем менять весь проект, можно в один отдельный модуль
Это плохое решение.
Много раз встречалось:
  • Текстовые редакторы требуют значительных усилий для переключения кодировок. (Например у меня ворд не узнает родную кодировку cp1251.)
  • Текстовые редакторы под win вообще не поддерживают utf-8
  • Чел забивает в текст программы (или конфиг) русское имя файла. При этом вообще не имеет понятия о том что такое кодировки а потом удивляется почему файлы не открываются.
Лучше иметь возможность поменять кодировки скопом.
import subprocess as sp
import glob
from mc2py.util import PathFind
for i in PathFind("*.py"):
    newname = i+".converted"
    sp.check_call("iconv -f UTF-8 -t cp1251 {old} >{new}".format(old=i,new=newname),shell=1)

PathFind это штука аналогичная шеловскому find.
Помянул iconv чтобы было понятно что можно bat файл написать и пользоваться без установки питона.



Отредактировано doza_and (Авг. 12, 2014 09:45:55)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version