controlar programa con tuberias
rodrigo ahumada
rodahummont en yahoo.com.ar
Vie Feb 4 21:31:24 CLST 2005
hola:
tengo una duda de tuberias:
resulta que me encontre un programa en python que controla mplayer en modo "slave", osea que recive comandos
como pause, seek, quit desde stdin.
la linea que lanza mplayer:
self.mplayerIn,self.mplayerOut=os.popen2("mplayer -slave -quiet \"" + target + "\" 2>/dev/null") #open pipe
fcntl.fcntl(self.mplayerOut, fcntl.F_SETFL, os.O_NONBLOCK)
para despues mandar comandos con:
self.mplayerIn.write(command + "\n")
self.mplayerIn.flush() #flush pipe
se me ocurrio probar lo mismo pero en c, lanza mplayer, toca la cancion, despues de un tiempo le mando mas
comandos pero mplayer los ignora... probe usando FILE* y file-descriptores y los resultados son los mismos.
[-----------]
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
char *seek_txt="seek -1\n";
char *pausa_txt="pause\n";
char *quit_txt="quit\n";
main() {
FILE *pipe=popen("mplayer -slave -quiet \"/home/rod/musica/mi-cancion.mp3\" 2>/dev/null","w");
if (pipe==NULL) {
printf("no se pudo\n");
return;
}
fcntl(fileno(pipe),F_SETFL,O_NONBLOCK);
printf("seek...\n");
//fprintf(pipe,"seek -1");
fwrite(seek_txt,sizeof(char),strlen(seek_txt),pipe);
fflush(pipe);
printf("sleep...\n");
sleep(6);
printf("pausa...\n");
//fprintf(pipe,"pause");
fwrite(pausa_txt,sizeof(char),strlen(pausa_txt),pipe);
fflush(pipe);
printf("quit...\n");
//fprintf(pipe,"quit");
fwrite(quit_txt,sizeof(char),strlen(quit_txt),pipe);
fflush(pipe);
fclose(pipe);
printf("listo\n");
}
[-----]
me falta algo? alguien sabe que cosas hace popen2 de python aparte de hacer popen?
gracias.
Más información sobre la lista de distribución Linux