2010-05-25 19 views
9

Dalla documentazione pitone:Primo parametro di os.exec *

I vari * exec (funzioni) prendere un elenco di argomenti per il nuovo programma caricato nel processo . In ogni caso, il primo di questi argomenti viene passato al come nome proprio anziché come argomento che un utente può digitare su una riga di comando. Per il programmatore C , questo è l'argv [0] passato al programma principale(). Per esempio , os.execv ('/ bin/echo', ['foo', 'bar']) stamperà solo la barra sullo standard output; foo sembrerà essere ignorato.

Qualcuno può aiutarmi a capirlo? Cosa devo fare se voglio eseguire il mio programma con alcuni parametri?

risposta

17

UNIX, da cui provengono tutte queste cose exec, separava il file eseguibile del programma dal nome del programma, in modo che il processo potesse avere qualsiasi nome arbitrario.

Il primo argomento è il programma che verrà eseguito. Questo deve esistere. L'argomento successivo è quello che il processo in esecuzione del programma sarà chiamato,, cosa sarà in argv[0] e cosa verrà visualizzato nell'output ps (elenco processi).

Quindi, se ho fatto (in C, ma le mappe di Python pure):

execl ("/usr/bin/sleep", "notsleep", "60", NULL); 

Questo sarebbe eseguire il programma /usr/bin/sleep ma sarebbe visualizzato nella lista dei processi come notsleep. argv[0] sarebbe e (l'argomento effettivo) sarebbe 60. Spesso, i primi due parametri saranno identici ma non è affatto necessario.

Ecco perché il primo argomento dell'elenco è (apparentemente) ignorato. È il nome da dare al processo, non il primo argomento ad esso.

Una più corretta modo per farlo sarebbe:

os.execv('/bin/echo', ['echo', 'foo', 'bar']) 
Problemi correlati