Форум сайта python.su
0
Для запуска стороннего консольного приложения из своей программы использую модуль subprocess. Код, отвечающий за запуск сейчас выглядит так (commands — список, содержащий команду и её аргументы):
cmd = ''.join(['%s ' % c for c in commands]) proc = subprocess.Popen( cmd, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=False, ).stdout
fse = sys.getfilesystemencoding() cmd = ''.join(['%s ' % c.encode(fse) if isinstance(c, unicode) else c for c in commands]) proc = subprocess.Popen( cmd, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=False, ).stdout
Офлайн
857
#!/usr/bin/env python # coding: utf-8 import subprocess as subp p = subp.Popen([u'echo', u'x', u'б'], stdout=subp.PIPE) p.wait() print (p.stdout.read(), p.returncode)
Отредактировано py.user.next (Авг. 9, 2014 10:24:55)
Офлайн
0
В Linux работает, вывод ниже
('x \xd0\xb1\n', 0)Traceback (most recent call last):
File "d:\test.py", line 6, in <module>
p = subp.Popen([u'echo', u'x', u'¦-'], stdout=subp.PIPE)
File "C:\OSGEO4~1\apps\Python27\lib\subprocess.py", line 711, in __init__ errread, errwrite)
File "C:\OSGEO4~1\apps\Python27\lib\subprocess.py", line 948, in _execute_child startupinfo)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0431' in position 7: ordinal not in range(128)
Офлайн
857
Поковырялся - дохлый номер. Винда.
import os with os.popen('echo x б') as p: print p.read()
Отредактировано py.user.next (Авг. 10, 2014 12:46:41)
Офлайн
6
import os with os.popen('echo x б') as p: print p.read().decode('cp866')
Офлайн
6
#!/usr/bin/env python # coding: utf-8 import subprocess proc = subprocess.Popen(['echo', 'д'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out = ' ' while out: out = proc.stdout.readline() print(out.rstrip().decode('cp866'))
Офлайн
857
Код Kasta_neda выводит не то, если у файла кодировка utf-8. Если файл в кодировке cp1251 (даже если декларирует utf-8), нормально выводит. Если же файл в utf-8 и декларируется utf-8, то символы правильно распознаются (в обычных строках), а subprocess выдаёт proc.stdout с вопросами.
Отредактировано py.user.next (Авг. 10, 2014 23:46:49)
Офлайн
6
Да, файл в кодировке cp1251 должен быть сохранен, или сохранен в utf-8 а декларирован в cp1251.
Отредактировано Kasta_neda (Авг. 11, 2014 06:25:57)
Офлайн
857
Kasta_neda
или сохранен в utf-8 а декларирован в cp1251
Отредактировано py.user.next (Авг. 11, 2014 09:44:45)
Офлайн
0
py.user.nextУ меня все файлы имеют кодировку utf-8, менять её на cp1251 не вариант.
Если файл в кодировке cp1251 (даже если декларирует utf-8), нормально выводит. Если же файл в utf-8 и декларируется utf-8, т
Офлайн