2010-03-08 30 views
9

Estoy lanzando un script de Python desde la línea de comandos (Bash) bajo Linux. Necesito abrir Python, importar un módulo y luego interpretar las líneas de código. La consola debe permanecer en Python (no salir de ella). ¿Cómo puedo hacer eso?Importando el módulo de Python desde el Bash

me han tratado un alias como éste:

alias program="cd /home/myname/programs/; python; import module; line_of_code" 

Pero esto sólo comienza pitón y los comandos no se ejecutan (sin importación de módulo, hay una línea de código tratada).

¿Cuál es la forma correcta de hacerlo, siempre que deba mantener Python abierto (no lo abandone) después de que se ejecuta el script? ¡Muchas gracias!

Respuesta

5

Una forma sencilla de hacerlo es con el "código" módulo:

python -c "import code; code.interact(local=locals())" 

Esto le va a caer en un shell interactivo cuando code.interact() es llamado . El argumento de la palabra clave local al interact se utiliza para rellenar previamente el espacio de nombres predeterminado para el intérprete que se crea; Usaremos locals(), que es una función incorporada que devuelve el espacio de nombres local como un diccionario.

su comando sería algo como esto:

python -c "import mymodule, code; code.interact(local=locals())" 

que cae en un intérprete que tiene el entorno correcto.

+0

Esto solo funciona a mitad de camino. Agregué mi módulo de importación, ya sea antes o después de 'importar código', pero cuando estoy en la consola interactiva de Python, mi módulo no está disponible. – Morlock

+1

Creo que el módulo de código puede hacer lo que quiera, pero tiene que iniciar el entorno de la siguiente manera: python -c "import sys, code; code.interact (local = locals())" Esto me deja en un comando shell que me permite: >>> print sys.argv [0] ¿Está más cerca de lo que estás tratando de hacer? –

+0

¡Genial! Esto hace el trabajo por mí. Mi propio módulo ahora también está cargado (import sys, code, mymodule; ...) Cheers – Morlock

3

Ejemplo:

python -c "import time ; print 'waiting 2 sec.'; time.sleep(2); print 'finished' " 
+1

@Karol Thx, pero debe permanecer dentro de Python en la consola ya que este es un script interactivo. Edité la pregunta para agregar esto. – Morlock

+1

Si necesita permanecer 'dentro' de python, inicie el intérprete con el indicador '-i'. – ChristopheD

+0

He intentado con -i (con o sin c-) pero obtengo un: 'python: no se puede abrir el archivo' módulo de importación ': [Errno 2] No existe ningún archivo o directorio' – Morlock

6

uso de una subrutina en lugar de alias

callmyprogram(){ 
    python -i -c "import time;print time.localtime()" 
} 
callmyprogram 
+0

@ ghostdog74 Nunca uso una subrutina antes. ¿Dónde pongo esto? En el archivo .bashrc? (.bash_bashrc porque estoy usando Linux Mint) ¿Cómo puedo lanzarlo? Gracias. – Morlock

+0

puedes ponerlo en cualquier script. ya que tienes '.bash_bashrc', puedes ponerlo allí. si desea usar la subrutina, simplemente haga una 'fuente .bash_bashrc' – ghostdog74

+0

+ para la combinación de' -i' y '-c', que resuelve el problema del OP. Si bien poner algo en una función nunca duele (para mayor flexibilidad), _un alias funcionaría igual de bien aquí_. Una nota sobre la terminología de Bash: 'subrutina' se usa como un término general para las funciones _shell_ y _surced scripts_; por lo tanto, es mejor llamar a esto una _ función [shell]. – mklement0

Cuestiones relacionadas