gentoo.ru
python
python@conference.gentoo.ru
Воскресенье, 31 октября 2010< ^ >
krigstask установил(а) тему: Python: простой и удобный язык программирования широкого применения
Конфигурация комнаты
Участники комнаты

GMT+4
[00:15:55] <qnikst> krigstask, есть идеи как в питоне отловить почему из subprocess может не завершаться?
[00:18:40] <krigstask> stderr ловить
[00:18:51] <krigstask> А
[00:18:53] <krigstask> Гм
[00:24:24] <qnikst> что-то мне подсказывает, что там вобще всё грустно и он не заканчивается
[00:24:54] <krigstask> Надо пошукать по модулю, что он там умеет
[00:25:03] <qnikst> угу
[00:25:14] <qnikst> ща ещё отладочгых print подабавляю
[00:25:22] <krigstask> http://docs.python.org/library/subprocess.html
[00:25:23] <qnikst> может отловлю где тупить начинает
[00:32:47] <qnikst> а видать я это пока не наладил всё себе поломал
[00:36:41] <krigstask> Чего?
[00:39:53] <qnikst> забей
[00:42:07] <krigstask> Это я могу
[00:57:32] <qnikst> а если метод возвращает tuple то как это в 2 переменные загнать?
[00:57:42] <qnikst> a,b = returing_tuple_method() ?
[01:04:20] <krigstask> Да
[01:04:29] <krigstask> Именно так (-:Е
[09:39:24] maksbotan вошёл(а) в комнату
[12:22:50] maksbotan вышел(а) из комнаты
[12:23:00] maksbotan вошёл(а) в комнату
[13:05:34] <qnikst> блин почему-то при subprocess.wait этот долбаный даркс никогда не заканчивается
[13:05:59] <krigstask> .communicate не пробовал?
[13:08:02] <qnikst> точно
[13:08:17] <qnikst> я походу вчера не правильно осилил смысл этого метода
[13:13:11] <krigstask> Я про него знаю, но не пользовался — он мне не подошёл
[13:13:18] <krigstask> В моей inotify-подсвечивалке
[16:09:44] maksbotan вышел(а) из комнаты: Replaced by new connection
[16:09:54] maksbotan вошёл(а) в комнату
[16:15:43] maksbotan вышел(а) из комнаты: Replaced by new connection
[16:15:53] maksbotan вошёл(а) в комнату
[16:31:56] maksbotan вышел(а) из комнаты
[16:32:31] maksbotan вошёл(а) в комнату
[16:50:24] maksbotan вышел(а) из комнаты
[16:51:08] maksbotan вошёл(а) в комнату
[17:35:37] maksbotan вышел(а) из комнаты
[17:36:24] maksbotan вошёл(а) в комнату
[17:44:38] maksbotan вышел(а) из комнаты: Replaced by new connection
[17:44:48] maksbotan вошёл(а) в комнату
[18:00:32] maksbotan вышел(а) из комнаты
[18:01:08] maksbotan вошёл(а) в комнату
[18:03:44] maksbotan вышел(а) из комнаты
[18:16:56] maksbotan вошёл(а) в комнату
[18:53:02] maksbotan вышел(а) из комнаты
[18:53:23] maksbotan вошёл(а) в комнату
[20:36:23] krigstask вышел(а) из комнаты
[20:44:03] <qnikst> ыть
[20:44:06] <qnikst> в общем
[20:44:41] <maksbotan> ну
[20:44:52] <qnikst> когда в subprocess запускается приложение с опцией stdout=sys.stderr, то оно не работает, а если с stdout=sys.stdout то работает
[20:44:59] <qnikst> не работает = "виснет"
[20:45:08] <maksbotan> stdout=sys.stderr зочем?
[20:45:18] <qnikst> так было в s-l-r
[20:45:21] <maksbotan> хм
[20:45:25] krigstask вошёл(а) в комнату
[20:45:36] <qnikst> как я понимаю, чтобы вывод в логи по умолчанию не шёл
[20:45:53] <qnikst> в общем я теперь в раздумьях кого пинать #darc или mgorny
[20:47:54] <krigstask> Вообще у тебя должно быть так:
sp = subprocess.Popen(cmd.split(" "), stdout=sys.stderr,shell=True)
[20:49:06] <qnikst> это к Горному )
[20:49:41] <krigstask> Он строку скармливает? Не список?
[20:50:16] <qnikst> ага
[20:50:21] <qnikst> в общем-то оно работает так
[20:50:35] <qnikst> со сплит ктстаи не работает :)
[20:52:40] <krigstask> А, ну строку оно тоже жрёт
[20:53:04] <qnikst> cmd.split() походу в уникод переводит и popen это не ест
[20:53:19] <krigstask> Хы
[20:53:23] <qnikst> в общем я горного спросил почему он в stderr всё пихает
[20:53:48] <qnikst> но его online походу нет уже 1.30 как idle
[20:56:30] <qnikst> хм.. а как в питоне в stderr понаписать?
[20:56:54] <qnikst> и нужно ли его как-нить обрабатывать, чтобы он не блокировался (sys.stderr)
[20:59:19] <maksbotan> sys.stderr.write
[21:05:21] krigstask вышел(а) из комнаты
[21:10:13] <qnikst> :/
[21:27:52] <qnikst> 18:24 < nosklo> qnikst: don't use shell=True
18:25 -!- buspital [~doug@cpc2-rdng23-2-0-cust1007.15-3.cable.virginmedia.com] has joined #python
18:25 < nosklo> qnikst: eve
[21:28:00] <qnikst> ever..
[21:28:05] <qnikst> хм а почему?
[21:29:06] <maksbotan> а shell=True что делает?
[21:31:04] <qnikst> а я документацию нормлаьно не нашёл
[21:31:08] <qnikst> это в Popen
[21:31:20] <maksbotan> тебе же криг давал ссылочку
[21:31:28] <maksbotan> http://docs.python.org/library/subprocess.html
[21:32:45] <qnikst> On Unix, with shell=True: If args is a string, it specifies the command string to execute through the shell. This means that the string must be formatted exactly as it would be when typed at the shell prompt. This includes, for example, quoting or backslash escaping filenames with spaces in them. If args is a sequence, the first item specifies the command string, and any additional items will be treated as additional arguments to the shell itself. That is to say, Popen does the equivalent of:
[21:32:53] <qnikst> Popen(['/bin/sh', '-c', args[0], args[1], ...])
[21:33:08] <maksbotan> ну и
[21:35:01] <qnikst> мне лень в ирц спрашивать почему никогда не использовать shell=True
[21:35:39] krigstask вошёл(а) в комнату
[21:37:08] <maksbotan> qnikst: а у тебя аргументы строкой ?
[21:37:30] <krigstask> Таки шо?
[21:38:25] <qnikst> 1 вопрос на #python мне очень сказали что нельзя использовать shell=True
[21:38:37] <qnikst> чуть выше копипаст из документации по этому поводу
[21:38:53] <qnikst> твоё мнение, просто в irc невозможно общаться на жирных каналах )
[21:39:12] <qnikst> вот и как следствие вопрос, как из массива уникодных строк сделать не уникодные?
[21:39:19] <qnikst> массив не уникодных строк
[21:39:27] <maksbotan> unicode.encode() вроде
[21:39:33] <maksbotan> и map()'ом натрави его
[21:40:26] <krigstask> Даже можно str(), наверное
[21:40:42] <maksbotan> хм, и правда наверно можно
[21:40:50] <krigstask> > в irc невозможно общаться на жирных каналах
Не понял
[21:41:36] <krigstask> Я не знаю, что они имели в виду, честно говоря
[21:41:44] <qnikst> ладно, пойду тогда спрашивать
[21:41:52] <krigstask> Наверное, портируемость
[21:42:42] <qnikst> видать да
[21:43:31] <qnikst> 18:42 < nosklo> qnikst: because it runs a shell to start your program
18:42 < nosklo> qnikst: that means you're starting two processes instead of one, and has to deal with
                shell escaping characters
[21:43:56] <krigstask> Ну да, и это тоже
[21:44:01] <krigstask> Про процессы я не подумал
[21:44:44] <qnikst> 18:43 < shylent> I am sure there is a valid use case for shell=True out there somewhere
[21:44:52] <qnikst> haven't come across it yet, though :)
[21:45:10] <qnikst> ну чо походу пропатчу и основную часть s-m-r
[21:45:24] <krigstask> Гы-гы
[21:45:44] <qnikst> 2 патча :)
[21:45:51] <qnikst> на darcs и на правку
[21:51:23] <qnikst> и ещё
[21:51:38] <qnikst> maksbotan, krigstask как format patch от 2ух commit-ов сделать?
[21:51:52] <maksbotan> в смысле от двух коммитов?
[21:52:01] <maksbotan> тебе чтоли чтобы в одном файле было два коммита?
[21:52:09] <krigstask> Слей в один, нет?
[21:52:44] <krigstask> Злоэпическим rebase'ом или что у вас там
[21:52:51] <qnikst> хм..
[21:52:55] <qnikst> они уже в мастере
[21:52:56] <krigstask> А я бы и вовсе сделал pull request
[21:53:02] <qnikst> лень
[21:53:04] <qnikst> там 1 строка
[21:53:13] <maksbotan> qnikst: объясни что хочешь-то
[21:53:55] <qnikst> есть дерево ->я клонировал->мой патч->не мой патч->мой патч->... я хочу 2 мои патча послать разработчику
[21:53:58] <maksbotan> krigstask: а у вас нету этого ребейза чтоли?
[21:54:00] <qnikst> мои действия?
[21:54:04] <qnikst> у них есть модулем
[21:54:11] <maksbotan> git format-patch HEAD~3
[21:54:11] <krigstask> Расширением
[21:54:15] <maksbotan> и средний выкидываешь
[21:54:28] <krigstask> Ой-ёй
[21:54:39] <maksbotan> я опять туплю, да?
[21:54:41] <krigstask> Этот фокус может и не пройти
[21:54:57] <maksbotan> почему?
[21:55:10] <qnikst> хм..
[21:55:51] <krigstask> Есть
1 --> 2 --> 3
   и
1 --> 3
[21:55:56] <qnikst> git reset ; git checkout; git cherry-pick; git cherry-pick; git checkout master; git reset --hard; git pull; git merge; git format patch?
[21:55:59] <qnikst> во как
[21:56:03] <qnikst> прокатит?
[21:56:12] <qnikst> git checkout = git checkout -b
[21:56:51] <maksbotan> что за ужас?
[21:56:54] <qnikst> т.е. сделат ветку в которую слить 2 патча и потом накатить их на возвращённый вначало мастер
[21:57:03] <maksbotan> qnikst: ну попробуй
[21:57:05] <krigstask> Да, вот выдернуть в новую ветку cherrypick'ом два отдельных можно
[21:57:17] <qnikst> вот это я и пытался сказать
[21:57:23] <krigstask> А я понял
[21:57:26] <krigstask> А ботан вот нет
[21:57:34] <maksbotan> я понял, но не сразу
[21:57:36] <krigstask> Ну да ничего, он ещё подрастёт и ума наберётся
[21:57:40] <maksbotan> =)
[21:58:37] <krigstask> Или можно пересадить 3 на 1
[21:59:11] <krigstask> Чтоб вышло
1 — 2
  \
   3
[21:59:35] <krigstask> Потом убить 2 и перетащить на origin:master
[21:59:57] <qnikst> хм.. пока мой вариант мне понятнее
[22:00:08] <krigstask> Да без разницы, в общем
[22:00:31] <krigstask> Но вообще это ты шляпу сделал, конечно
[22:01:05] <qnikst> а на гитхабе не пишется email человека? никто не знает?
[22:01:13] <qnikst> krigstask, почему же
[22:01:23] <qnikst> ну я мог не pull-ить разве что
[22:01:33] <krigstask> Как между твоими коммитами влез чужой?
[22:01:56] <qnikst> я запулил на случай, что мне может и не придётся писать 2ой патч
[22:02:06] <krigstask> Или это особая гитовая магия?
[22:02:20] <krigstask> В hg я бы так не сумел без приложения спецусилий
[22:02:25] <qnikst> т.к. там менялся тот файл, который мне нужно было пофиксить
[22:02:25] <maksbotan> у крига чуть что сразу гит виновать
[22:02:38] <qnikst> дык в чём проблема
[22:02:55] <qnikst> hg add ; hg commit; hg pull ; hg merge ; hg add; hg commit;
[22:03:13] <qnikst> если бы я закоммитил то был бы конфликт :)
[22:04:01] maksbotan вышел(а) из комнаты: Replaced by new connection
[22:04:11] maksbotan вошёл(а) в комнату
[22:05:36] <krigstask> Не, было бы не так
[22:06:36] <qnikst> о там ваще всё круто вышло
[22:06:41] <qnikst> когда я gitk окрыл
[22:08:10] <krigstask> Тут-то всё и завертелось (-%Е
[22:08:22] <maksbotan> =)
[22:10:33] <qnikst> теперь как бы эти патчи горному послать..
[22:11:06] <krigstask> Почтою?
[22:11:22] <krigstask> mgorny@gentoo.org, ёпта
[22:11:33] <qnikst> ва-у
[22:11:38] <krigstask> Наверное
[22:11:45] <krigstask> Ну или в яббер к нему стукнуться
[22:12:21] <qnikst> ну в irc он висит не отвечая
[22:12:30] <qnikst> блин а не всё работает ((
[22:13:03] <qnikst> чорт всё таки придётся с ним общаться )
[22:13:08] <krigstask> (-%Е
[22:13:42] <maksbotan> =)
[22:14:07] <qnikst> блин darcs виснет когда пишет в stderr
[22:19:00] <krigstask> Ваще всегда?
[22:24:35] <qnikst> ага
[22:24:39] <qnikst> а не
[22:24:49] <qnikst> иногда (очень редко) нет
[22:25:24] <qnikst> я уже пытаюсь strace прицепить
[22:39:53] <qnikst> еееееееееееееее!
[22:40:06] <qnikst> http://github.com/mgorny/smart-live-rebuild/blob/master/SmartLiveRebuild/vcs/cvs.py#L59
[22:40:19] <qnikst> горный подсказал мне идею как всё это лечится
[22:41:52] <krigstask> Ха, думаешь, с darcs то же самое?
[22:42:53] <qnikst> 100%
[22:43:03] <qnikst> exec 2>&1 ; darcs уже работает
[22:43:15] <qnikst> но только с shell=True
[22:43:26] <qnikst> иначе эта магия не работает
[22:43:57] <maksbotan> да понятно
[23:53:44] maksbotan вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!