modo per specificare interprete Python quando si esegue con execv cross-platform
Domanda
Sono attualmente in esecuzione uno script Python sia su Linux e Windows 7. Il file viene eseguito in uno stile execv con questo intendo che l'interprete è definita all'inizio del file in un comando.
sistema in Windows, la specifica interprete è:
#!C:\Python26\python.exe
Tuttavia in Linux questo deve essere
#!/usr/bin/python
Vorrei eseguire questo script in entrambi i sistemi, senza dover cambiare ancora e ancora questa linea.
Ho provato quanto segue:
#!C:\Python26\python.exe
#!/usr/bin/python
così come:
#!C:\Python26\python.exe;/usr/bin/python
Quindi: non v'è alcun modo ho potuto specificare più interpreti
Soluzione
#!/usr/bin/env python
che chiamerà il programma env
per cercare il tuo PATH per un eseguibile Python.
Se è necessario per garantire una versione specifica di Python si può fare per esempio:.
#!/usr/bin/env python2.5
Altri suggerimenti
A seconda di ciò che si sta cercando di fare, questo potrebbe essere un po 'pesante, ma 0install può eseguire il programma sarà l'interprete Python adeguato per la propria piattaforma. In descrizione XML del tuo programma, fare qualcosa di simile (ad esempio, se si desidera Python> = 2.6, <3):
<command name="run" path="myprog.py">
<runner interface="http://repo.roscidus.com/python/python">
<version not-before="2.6" before="3"/>
</runner>
</command>
See: http://www.0install.net/local-feeds.html
Questo renderà anche 0install scaricare una versione adatta di Python se l'utente non ce l'ha già.
Si noti che si potrebbe voler fare questo, anche se si sta solo rivolte a Linux, perché con Python 3 non esiste un unico #! linea che funziona su tutte le piattaforme (alcune piattaforme, per esempio, richiedono Arco "python2" non "python", mentre altri, per esempio Debian, non forniscono "python2", solo "python").