Flavio, voy a probar lo que me compartes. Por el momento estoy ejecutando el script con con os.system que funciono sin problemas.
Estaré comentando. 2015-05-05 11:12 GMT-05:00 Flavio Danesse <fdane...@gmail.com>: > Te paso parte del código de una aplicación mía. > Es un reproductor de audio video y streaming que tiene una interfaz gtk > pero utiliza mplayer en modo esclavo para reproducir. > Lo que hace es usar un mplayer precompilado con todos los plugins como > reproductor. Eso lo accede a través de subpreocess. > > def play_archivo(self, direccion): > > ejecutable_cache_pantalla = "%s -cache %i -wid %i" % ( > self.ejecutable, 1024, self.id_pantalla) > > estructura = "%s -slave -idle -nolirc -rtc -nomouseinput > -noconsolecontrols -nojoystick" % (ejecutable_cache_pantalla) > > self.mplayer = subprocess.Popen( > estructura, shell=True, stdin=subprocess.PIPE, > stdout=open(STDOUT, "w+b"), > stderr=open(STDOUT, "r+b"), > universal_newlines=True) > > self.entrada = self.mplayer.stdin > self.salida = open(STDOUT, "r") > self.entrada.write("loadfile %s 0\n" % direccion) > self.entrada.flush() > > Como verás, creo stdout y stderr como archivos para poder leer cada cierto > tiempo lo que va tirando mplayer. > stdin es un pipe al subproceso donde puedo escribir cuando quiera para > poder pasarle las opciones que soporta mplayer en modo sclavo. Igual, en > primera instancia no es importante nada de eso para lo que tu quieres > hacer, solo te lo explico para aclararte mejor el codigo. El tema es que no > debes usar comunicate por que no funciona, usa subprocess.Popen y pasale > como primer parámetro lo que quieres ejecutar tomando en cuenta el detalle > de que por ejemplo: si es un compilado que tienes en el directorio local > como es el caso de este ejemplo, el ejecutable debes indicarlo como > "./mplayer", si pones solo "mplayer", lo va a buscar al path del sistema y > no ejecutará el que tienes en que tienes en tu directorio. > > El 4 de mayo de 2015, 10:10, Chema Cortes <pych...@gmail.com> escribió: > >> [[reenvio de nuevo el mensaje a la lista]] >> >> Lo del os.path.join es un modo de hacerlo más "portable", si lo >> necesitaras: >> >> par = os.path.join(os.getcwd(), fname) >> >> o más directo >> >> par = os.path.abspath(fname) >> >> >> Seguramente que el script de perl esté lanzando sus propios PIPEs. Prueba >> a ejecutarlo con shell=True >> >> >> >> ---------- Mensaje reenviado ---------- >> De: Juan Camilo Hernandez Diaz <camilo.hernan...@gmail.com> >> Fecha: 4 de mayo de 2015, 4:50 >> Asunto: Re: [Python-es] Modulo subprocess y Script Perl >> Para: p...@ch3m4.org >> >> >> Chema. >> >> Te cuento he probado la opcion del time.sleep(60) y el problema >> persiste, también verifique con el env del bash y cuando es ejecutado >> muestra el mismo entorno. >> >> >> El os.path.join nunca lo he trabajado, me podrias ayudar con un ejemplo >> para ver que pasa? >> >> 2015-05-03 18:46 GMT-05:00 Chema Cortes <pych...@gmail.com>: >> >> >>> >>> El 3 de mayo de 2015, 22:07, Juan Camilo Hernandez Diaz < >>> camilo.hernan...@gmail.com> escribió: >>> >>>> Gracias por tu respuesta. >>>> >>>> Mira como estoy pasando los datos: >>>> >>>> *cmd = "/opt/tools/RT_reformat.pl"* >>>> *par = "{0}/{1}".format(os.getcwd(), fname)* >>>> *cmd_exe = subprocess.Popen([cmd, par], shell=False, >>>> stdout=subprocess.PIPE, stderr=subprocess.PIPE)* >>>> *stdout, stderr = cmd_exe.communicate()* >>>> *print stdout, stderr* >>>> >>>> tambien probe con: >>>> cmd = *"/opt/tools/RT_reformat.pl **{0}/{1}".format(os.getcwd(), >>>> fname), eliminando logicamente lo referente a la variable par-* >>>> >>>> la variable *par* hace referencia a un archivo de texto (Sensor. >>>> 2015022300) plano que contiene un listado de sensores y valores de >>>> temperatura, la salida del comando es un archivo en texto plano con un >>>> formato especifico ¿Estoy haciendo algo mal? >>>> >>> >>> Está correcto (aunque mejor usar os.path.join para la ruta del fichero) >>> >>> Intuyo que hay una mala comunicación entre el script de perl y python. >>> Parece como que el código python acabe antes de que el script de perl haya >>> procesado todo el fichero. Precisamente, communicate debería esperar hasta >>> que el subproceso acabe, pero puede que el script de perl se dedique a >>> lanzar otros procesos que python no ve. >>> >>> Prueba a poner una espera (time.sleep()) antes de communicate a ver si >>> termina bien. >>> >>> >>> >>> >>>> >>>> >>>> 2015-05-03 14:31 GMT-05:00 Chema Cortes <pych...@gmail.com>: >>>> >>>>> >>>>> >>>>> El 3 de mayo de 2015, 18:56, Juan Camilo Hernandez Diaz < >>>>> camilo.hernan...@gmail.com> escribió: >>>>> >>>>>> Un saludo a todos. >>>>>> >>>>>> Tengo la necesidad de ejecutar un script en perl, el cual es provisto >>>>>> por un tercero; este básicamente efectúa una consulta y genera un archivo >>>>>> en un formato especifico. >>>>>> >>>>>> He programado una función en python que se encarga de ejecutar este >>>>>> archivo, y continuar la ejecución de las demás tareas. Sin embargo, este >>>>>> no >>>>>> se ejecuta como es debido (no genera el archivo de salida) >>>>>> >>>>>> Hasta el momento he probado con os.system, subsystem.call y >>>>>> subsystem.Popen, todos con el mismo resultado: >>>>>> >>>>> >>>>> Entiendo que por "subsystem" te refieres a "subprocess" >>>>> >>>>> >>>>>> >>>>>> *substr outside of string at /opt/tools/RT_reformat.pl line 77, <IN> >>>>>> line 15729* >>>>>> >>>>>> Igualmente, trate de generar un bash script que fuera llamado desde >>>>>> mi script python y ejecutara el modulo en perl; igual resultado. >>>>>> >>>>>> Cuando ejecuto el script directamente en bash funciona sin problemas >>>>>> y genera los archivos requeridos ¿Alguna sugerencia de como superar esto? >>>>>> >>>>>> >>>>> >>>>> Por el error, parece que el script de perl no encuentra nada en el >>>>> stream de entrada <IN>. Cuando dices que el script "efectúa una consulta", >>>>> probablemente espera encontrar algo que deberías suministrar. Tal vez, >>>>> pida >>>>> que le introduzcas un dato o simplemente pulsar una tecla para continuar. >>>>> Por defecto, el proceso que lanza python no tiene ninguna entrada de >>>>> datos. >>>>> >>>>> Puede que la documentación te ayude: >>>>> >>>>> https://docs.python.org/2/library/subprocess.html#replacing-older-functions-with-the-subprocess-module >>>>> >>>>> >>>>> -- >>>>> Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": >>>>> http://ch3m4.org/blog >>>>> Buscador Python Hispano: http://ch3m4.org/python-es >>>>> >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> Python-es@python.org >>>>> https://mail.python.org/mailman/listinfo/python-es >>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>> >>>>> >>>> >>>> >>>> -- >>>> JUAN CAMILO HERNÁNDEZ DÍAZ >>>> >>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es@python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> FAQ: http://python-es-faq.wikidot.com/ >>>> >>>> >>> >>> >>> -- >>> Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": >>> http://ch3m4.org/blog >>> Buscador Python Hispano: http://ch3m4.org/python-es >>> >> >> >> >> -- >> JUAN CAMILO HERNÁNDEZ DÍAZ >> >> >> >> >> -- >> Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": >> http://ch3m4.org/blog >> Buscador Python Hispano: http://ch3m4.org/python-es >> >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > -- JUAN CAMILO HERNÁNDEZ DÍAZ
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/