python como un script “por lotes” (es decir, ejecutar comandos desde python)

Estoy trabajando en un entorno de Windows (¡mi computadora portátil!) Y necesito un par de scripts que ejecuten otros progtwigs, casi como un archivo por lotes de Windows.

¿Cómo puedo ejecutar un comando desde Python para que el progtwig, cuando se ejecute, reemplace el script? El progtwig es interactivo (por ejemplo, al unísono) y sigue imprimiendo líneas y solicitando información del usuario todo el tiempo.

Por lo tanto, solo ejecutar un progtwig e imprimir la salida no será suficiente. El progtwig tiene que tomar el control de la entrada / salida del script, bastante bien, como ejecutar el comando desde un archivo .bat.

Intenté os.execl pero me sigue diciendo “argumentos no válidos”, además, no encuentra el nombre del progtwig (no busca la variable PATH); Tengo que darle el camino completo ..?!

Básicamente, en un script por lotes puedo escribir: unison perfil

¿Cómo puedo lograr el mismo efecto en python?

EDITAR:

Descubrí que se puede hacer con os.system( ... ) y como no puedo aceptar mi propia respuesta, estoy cerrando la pregunta.


EDITAR: se suponía que esto era un comentario, pero cuando lo publiqué no tenía muchos puntos.

Gracias, Claudiu, eso es lo que quiero, excepto por una pequeña cosa: quiero que la función termine cuando el progtwig sale, pero cuando lo bash al unísono, no devuelve el control al script de Python, sino a las ventanas. entorno de línea de comando

 >>> os.execlp("unison") C:\>Usage: unison [options] or unison root1 root2 [options] or unison profilename [options] For a list of options, type "unison -help". For a tutorial on basic usage, type "unison -doc tutorial". For other documentation, type "unison -doc topics". C:\> C:\> C:\> 

¿Cómo evitar esto?

Debe crear un nuevo proceso utilizando el módulo de subproceso .

No soy fluido en los procesos de Windows, pero su función Popen es multiplataforma, y ​​debería preferirse a soluciones específicas del sistema operativo.

EDITAR: Sostengo que debería preferir el módulo de Subproceso a las funciones específicas de OS. * OS, es multiplataforma y más pythonic (solo google). Puedes esperar el resultado de forma fácil y limpia :

 import os import subprocess unison = os.path.join(os.path.curdir, "unison") p = subprocess.Popen(unison) p.wait() 

Descubrí que os.system hace lo que quiero,

Gracias por todo lo que trató de ayudar.

 os.system("dir") 

ejecuta el comando como si fuera ejecutado desde un archivo por lotes

 import subprocess proc = subprocess.Popen(['unison', 'profile'], stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE) proc.stdin.write('user input') print proc.stdout.read() 

Esto debería ayudarte a empezar. ¡Edite su pregunta con más información si desea una respuesta más detallada!

os.execlp debería funcionar. Esto buscará en tu camino el comando. No le dé argumentos si no son necesarios:

 >>> import os >>> os.execlp("cmd") D:\Documents and Settings\Claudiu>Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. D:\Documents and Settings\Claudiu>