Найти - Пользователи
Полная версия: PyGTK передача данных между приложениями
Начало » GUI » PyGTK передача данных между приложениями
1
belk_o
Возник вопрос - какие способы передачи данных существуют?
Ситуация такая - есть программа, работающая в терминале (ядро) - к ней привешен гуй.
Какие правильные и неправильные способы обмена информацией между ними есть в природе?
1 Socket
2 subprocess - Pipe
3 raw_input()
4 dbus? - пока тёмный лес
5 потоки - они же нити - тоже недалеко от тёмного леса

Эксперты - подскажите какой метод наиболее правильный, может при этом выполняться в реальном времени (циклично) и самый простой?

Думаю эта тема будет актуальна для многих.
o7412369815963
обычно оболочки над консольными прогами взаимодействуют через subprocess
Lexander
Зависит от того, какими именно данными вы собираетесь обмениваться и какая связь между ядром и ГУИ вам нужна.
ilya1
Если просто запускает консольную прогу, а последняя выполняется моментально, то suprocess.Popen() проще всего (и к PyGTK оно не привязано). Если же она выполняется долго, то для GUI-проги нужно организовать оповещение, когда приходят данные от консольной проги, чтобы не подвисать. В этом случае методы 1 и 4 подойдут, разница между ними - в API (ваш К.О.), а raw_input() вообще обертка на чтением для консольных программ (из стандартного ввода). 5 - не для передачи данных.

Какой проще,- 1 или 4, не знаю (пользовалcя ими из C++); Питон все с ног на голову перевернуть может в плане просто/сложно.
belk_o
ilya1
Если просто запускает консольную прогу, а последняя выполняется моментально, то suprocess.Popen() проще всего (и к PyGTK оно не привязано). Если же она выполняется долго, то для GUI-проги нужно организовать оповещение, когда приходят данные от консольной проги, чтобы не подвисать. В этом случае методы 1 и 4 подойдут, разница между ними - в API (ваш К.О.), а raw_input() вообще обертка на чтением для консольных программ (из стандартного ввода). 5 - не для передачи данных.

Какой проще,- 1 или 4, не знаю (пользовалcя ими из C++); Питон все с ног на голову перевернуть может в плане просто/сложно.
Уже проясняется :)
Моя ситуация такая - консольная прога сбрасывает данные в постоянно обновляемый текстовый файл, а GUI постоянно считывает и выдаёт в случае изменений в файле новую информацию (обновляет)- в моём случае treeview. Я так понимаю - это не лучший способ?



Subprocess - он кроссплатформенный? Я пока в Linux - хотелось бы иметь возможность потом портировать под винь.
ilya1
belk_o
Уже проясняется :)
Моя ситуация такая - консольная прога сбрасывает данные в постоянно обновляемый текстовый файл, а GUI постоянно считывает и выдаёт в случае изменений в файле новую информацию (обновляет)- в моём случае treeview. Я так понимаю - это не лучший способ?



Subprocess - он кроссплатформенный? Я пока в Linux - хотелось бы иметь возможность потом портировать под винь.
Subprocess - проще попробовать самому, там ничего сложного. Про обмен через файл - ищите API оповещения об изменении файлов
(тогда никакой передачи данных между прогами и не потребуется).
Андрей Светлов
API - inotify для линукса и ReadDirectoryChanges для Windows. Оба заворачиваются через ctypes без проблем.
Помнится, были уже готовые обертки - гугль вам в помощь
belk_o
Вот спасибо! pynotify - то, что надо!
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