modo per specificare interprete Python quando si esegue con execv cross-platform

StackOverflow https://stackoverflow.com/questions/3988598

  •  10-10-2019
  •  | 
  •  

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

È stato utile?

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").

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top