On Wed, 14 Aug 2019 07:43:01 +0200 Pierre Couderc <[email protected]> said:
> My source is:
>
> childHandle = ecore_exe_pipe_run("ps aux"),static_cast<Ecore_Exe_Flags>(
> ECORE_EXE_PIPE_READ_LINE_BUFFERED ), NULL);
> ecore_event_handler_add(ECORE_EXE_EVENT_DATA,
> receive_process_messages, data);
>
> I get no message in "receive_process_messages".
>
> If I use : ECORE_EXE_PIPE_WRITE | ECORE_EXE_PIPE_READ_LINE_BUFFERED |
> ECORE_EXE_PIPE_READ, I get a few "lines" : 4 instead of tenths...
>
> What do I miss ?
do you have other event handlers handling exe event data too? do they return
ECORE_CALLBACK_PASS_ON? here is some basic sample c code that also throws in
handlers for add and del of the exe too and print exit code. I see line
buffered data in multiple events. it takes 5 events to deliver all of the
output. i used /bin/ps to ensure my aliases don't change anything from my user
shell env. i returned ECORE_CALLBACK_PASS_ON to pass the event on to other
event handlers of the same type of event. i set up handlers before i run
anything to ensure they are in place first... ?
------------------------------------------------------------------------------
#include <Eina.h>
#include <Ecore.h>
static Eina_Bool _cb_exe_add(void *data, int type, void *event) {
Ecore_Exe_Event_Add *ev = event;
printf("exe add %p\n", ev->exe);
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool _cb_exe_dat(void *data, int type, void *event) {
Ecore_Exe_Event_Data *ev = event;
printf("exe data: %p [%p, %i bytes] ...\n", ev->exe, ev->data, ev->size);
if (ev->lines) {
for (int i = 0; ev->lines[i].line; i++)
printf(" exe line %p '%s'\n", ev->exe, ev->lines[i].line);
}
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool _cb_exe_del(void *data, int type, void *event) {
Ecore_Exe_Event_Del *ev = event;
printf("exe del %p exit_code=%i\n", ev->exe, ev->exit_code);
return ECORE_CALLBACK_PASS_ON;
}
int main(int argc, char **argv) {
ecore_init();
ecore_event_handler_add(ECORE_EXE_EVENT_ADD, _cb_exe_add, NULL);
ecore_event_handler_add(ECORE_EXE_EVENT_DATA, _cb_exe_dat, NULL);
ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _cb_exe_del, NULL);
Ecore_Exe *exe = ecore_exe_pipe_run("/bin/ps aux",
ECORE_EXE_PIPE_READ_LINE_BUFFERED |
ECORE_EXE_PIPE_READ,
NULL);
printf("launched exe %p\n", exe);
ecore_main_loop_begin();
ecore_shutdown();
}
------------------------------------------------------------------------------
--
------------- Codito, ergo sum - "I code, therefore I am" --------------
Carsten Haitzler - [email protected]
_______________________________________________
enlightenment-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-users