2010-03-08 16 views
9

Sto lanciando uno script Python dalla riga di comando (Bash) sotto Linux. Devo aprire Python, importare un modulo e quindi interpretare le righe di codice. La console deve quindi rimanere in Python (non chiuderla). Come lo faccio?Importazione del modulo Python da Bash

ho provato un alias come questo:

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

Ma questo inizia solo pitone ei comandi non vengono eseguiti (senza module import, nessuna riga di codice trattata).

Qual è il modo corretto di farlo, purché sia ​​necessario mantenere aperto Python (non chiuderlo) dopo che lo script è stato eseguito? Mille grazie!

risposta

5

Un modo semplice per farlo è con il modulo "codice":

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

Questo vi porterà in una shell interattiva quando code.interact() viene chiamato . L'argomento della parola chiavesu interact viene utilizzato per prepopolare lo spazio dei nomi predefinito per l'interprete che viene creato; useremo locals(), che è una funzione incorporata che restituisce lo spazio dei nomi locale come dizionario.

Il comando sarebbe simile a questa:

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

che vi porterà in un interprete che ha l'ambiente corretto.

+0

Funziona solo a metà. Ho aggiunto il mio modulo di importazione, sia prima che dopo "codice di importazione", ma quando nella console python interattiva, il mio modulo non è disponibile. – Morlock

+1

Penso che il modulo di codice possa fare quello che vuoi, ma devi riavviare l'ambiente in questo modo: python -c "import sys, code; code.interact (local = locals())" Questo mi porta a un comando shell che mi permette di fare: >>> print sys.argv [0] E 'più vicino a quello che stai cercando di fare? –

+0

Ottimo! Questo fa il lavoro per me. Il mio modulo è ora anche caricato (import sys, code, mymodule; ...) Cheers – Morlock

3

Esempio:

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

@Karol Thx, ma devo rimanere all'interno Python nella console poiché si tratta di uno script interattivo. Ho modificato la domanda per aggiungerla. – Morlock

+1

Se è necessario rimanere "dentro" python, avviare l'interprete con il flag '-i'. – ChristopheD

+0

Ho provato con -i (con o senza c-) ma ottengo un: 'python: impossibile aprire il file' modulo di importazione ': [Errno 2] Nessun file o directory' – Morlock

6

uso una subroutine invece di alias

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

@ ghostdog74 Non uso mai prima una subroutine. Dove lo metto? Nel file .bashrc? (.bash_bashrc perché sto usando Linux Mint) Come faccio a lanciarlo? Grazie. – Morlock

+0

puoi inserirlo in qualsiasi script. dato che hai '.bash_bashrc', puoi metterlo lì. se vuoi usare la subroutine, fai un 'source .bash_bashrc' – ghostdog74

+0

+ per la combinazione di' -i' e '-c', che risolve il problema dell'OP. Mentre mettere qualcosa in una funzione non fa mai male (per una maggiore flessibilità), un alias funzionerebbe altrettanto bene qui_. Una nota sulla terminologia di Bash: 'subroutine' è usata come un termine generico per entrambe le funzioni _shell_e _ scriptssour_; pertanto, è meglio chiamare questa una funzione _ [shell]. – mklement0

Problemi correlati