Quando python viene eseguito, crea sys.argv
per te. I valori in quell'elenco sono basati sugli argomenti passatigli dal sistema operativo, ma si interrompe il sys.executable
valore da quell'elenco.
In altre parole, quando Python viene invocato, imposta sys.argv
a tutto ma è il proprio eseguibile .
Quando invochi un new eseguibile tramite os.execlp()
, devi comunque includere Python in quanto è l'eseguibile che verrà eseguito dal sistema operativo. I primi due valori di ciò che passi a os.execlp()
sono ancora obbligatori, qualunque cosa tu trovi in sys.argv
più tardi.
Il secondo python è un nome per python, può essere qualsiasi stringa, ma deve essere lì.
Vedi il secondo paragrafo di http://docs.python.org/3/library/os.html?highlight=os.exec#process-management:
Le varie funzioni exec* accettano un elenco di argomenti per il nuovo programma caricato nel processo. In ogni caso, il primo di questi argomenti viene passato al nuovo programma come proprio nome piuttosto che come argomento che un utente potrebbe aver digitato su una riga di comando. Per il programmatore C, questo è l'argv[0] passato alla main() di un programma. Ad esempio, os.execv('/bin/echo', ['foo', 'bar']) stamperà solo barra sullo standard output; foo sembrerà essere ignorato.