Найти - Пользователи
Полная версия: subprocess и non-ASCII символы
Начало » Python для новичков » subprocess и non-ASCII символы
1 2
doza_and
_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”
py.user.next
_alexs_
У меня все файлы имеют кодировку utf-8, менять её на cp1251 не вариант.

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

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

Вот, осталось ещё из даша.bat вывести русский текст (в питон). :)
Kasta_neda
Зачем менять весь проект, можно в один отдельный модуль вывести именно эту функцию например, я к тому что не надо сразу ставить крест, решения всегда есть.
doza_and
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 файл написать и пользоваться без установки питона.
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