2012-07-09 13 views
5

Vorrei eseguire uno script work.py in Python, dopo aver eseguito lo script di inizializzazione init.py.Script di avvio Python

Se stavo cercando una sessione interattiva, eseguire python -i init.py o impostare PYTHONSTARTUP=/path/to/init.py farebbe il trucco, ma sto cercando di eseguire un altro script.

Poiché si tratta di un caso generico che si verifica spesso (init.py imposta l'ambiente e quindi è sempre lo stesso), preferirei non fare riferimento a init.py da work.py. Come si può fare? Qualcosa cambierebbe se avessi avuto bisogno di questo da uno script invece che dal prompt?

Grazie mille.

+0

Come funziona 'lavoro' dipende da' init'? Potresti fare l'importazione di init 'python -c '; lavoro di importazione''? - o forse meno elegantemente, 'python -c 'execfile (" init.py "); execfile ("work.py") '' – mgilson

+0

' work' richiede che 'init' sia eseguito prima di esso. Quello che stai suggerendo potrebbe funzionare (lo proverò ora) ma non è affatto l'ideale - ho bisogno di qualcosa di simile ogni volta che eseguo uno script Python. Potrei creare un alias o creare un comando shell per farvi riferimento nel solito modo, ad es. 'py work.py' dove' py() 'sarebbe un comando di shell definito, ma questo causerà altri problemi. Preferirei un modo pulito di eseguire sempre lo stesso script init se ce n'è uno ... – gt6989b

+0

Quindi, (per essere chiari), si vuole definire globalmente uno script ('init.py') da chiamare prima di qualsiasi altra cosa all'avvio di python come se steste facendo qualcosa come 'cat init.py main.py | python' è completamente indipendente dal file 'main.py' che è in realtà? – mgilson

risposta

5

Più in generale che nella risposta accettata di C0deH4cker, questo è discusso nel manuale Python in Section 2.2.5 - Cusomization Modules. L'idea di base è, per ottenere la posizione dello script di avvio speciale, è necessario eseguire il seguente codice Python, ad es. dalla sessione interattiva dell'interprete:

>>> import site 
>>> site.getusersitepackages() 
'/home/user/.local/lib/python3.2/site-packages' 

L'output dovrebbe essere esattamente una tale posizione, nel file sitecustomize.py.

+0

Questa dovrebbe essere la risposta accettata, dal momento che è più portabile. –

4

Python ha uno script speciale che viene eseguito all'avvio. Sulla mia piattaforma si trova a /usr/lib/python2.5/site-packages/sitecustomize.py IIRC. Quindi, puoi inserire init.py in quella directory accanto a uno script sitecustomize.py che lo importa, o semplicemente incollare il contenuto di init.py nel sitecustomize.py.

+0

non può farlo funzionare - metti 'init.py' in'/percorso/per/python/site-packages/site-customize.py' (la directory esisteva, il file no) e non vedere le modifiche allo stato precedente. – gt6989b

+1

Oops, its sitecustomize.py (senza trattino). Modifica risposta. – C0deH4cker

+0

grazie, ha funzionato come per magia. Vorrei che tu potessi farlo senza hacking però. Per ora, a meno che non appaia qualcosa di qualitativamente migliore, accetterò volentieri la tua risposta. Grazie per aiutarmi. – gt6989b

Problemi correlati