Форум сайта python.su
Возник вопрос - какие способы передачи данных существуют?
Ситуация такая - есть программа, работающая в терминале (ядро) - к ней привешен гуй.
Какие правильные и неправильные способы обмена информацией между ними есть в природе?
1 Socket
2 subprocess - Pipe
3 raw_input()
4 dbus? - пока тёмный лес
5 потоки - они же нити - тоже недалеко от тёмного леса
Эксперты - подскажите какой метод наиболее правильный, может при этом выполняться в реальном времени (циклично) и самый простой?
Думаю эта тема будет актуальна для многих.
Офлайн
обычно оболочки над консольными прогами взаимодействуют через subprocess
Офлайн
Зависит от того, какими именно данными вы собираетесь обмениваться и какая связь между ядром и ГУИ вам нужна.
Офлайн
Если просто запускает консольную прогу, а последняя выполняется моментально, то suprocess.Popen() проще всего (и к PyGTK оно не привязано). Если же она выполняется долго, то для GUI-проги нужно организовать оповещение, когда приходят данные от консольной проги, чтобы не подвисать. В этом случае методы 1 и 4 подойдут, разница между ними - в API (ваш К.О.), а raw_input() вообще обертка на чтением для консольных программ (из стандартного ввода). 5 - не для передачи данных.
Какой проще,- 1 или 4, не знаю (пользовалcя ими из C++); Питон все с ног на голову перевернуть может в плане просто/сложно.
Офлайн
ilya1Уже проясняется :)
Если просто запускает консольную прогу, а последняя выполняется моментально, то suprocess.Popen() проще всего (и к PyGTK оно не привязано). Если же она выполняется долго, то для GUI-проги нужно организовать оповещение, когда приходят данные от консольной проги, чтобы не подвисать. В этом случае методы 1 и 4 подойдут, разница между ними - в API (ваш К.О.), а raw_input() вообще обертка на чтением для консольных программ (из стандартного ввода). 5 - не для передачи данных.
Какой проще,- 1 или 4, не знаю (пользовалcя ими из C++); Питон все с ног на голову перевернуть может в плане просто/сложно.
Офлайн
belk_oSubprocess - проще попробовать самому, там ничего сложного. Про обмен через файл - ищите API оповещения об изменении файлов
Уже проясняется :)
Моя ситуация такая - консольная прога сбрасывает данные в постоянно обновляемый текстовый файл, а GUI постоянно считывает и выдаёт в случае изменений в файле новую информацию (обновляет)- в моём случае treeview. Я так понимаю - это не лучший способ?
Subprocess - он кроссплатформенный? Я пока в Linux - хотелось бы иметь возможность потом портировать под винь.
Офлайн
API - inotify для линукса и ReadDirectoryChanges для Windows. Оба заворачиваются через ctypes без проблем.
Помнится, были уже готовые обертки - гугль вам в помощь
Офлайн
Вот спасибо! pynotify - то, что надо!
Офлайн