2010-05-25 9 views
9

den Python-docs:erste Parameter von os.exec *

Die verschiedenen exec *() Funktionen übernehmen eine Liste der Argumente für das neue Programm in den Prozess geladen. In jedem Fall wird das erste dieser Argumente an das neue Programm als seinen eigenen Namen statt als ein Argument übergeben, das ein Benutzer in eine Befehlszeile eingegeben haben kann. Für den C-Programmierer ist dies der argv [0] , der an das Hauptprogramm eines Programms() übergeben wird. Für Beispiel wird os.exec ('/ bin/echo', ['foo', 'bar']) nur Bar auf Standardausgabe drucken; foo scheint ignoriert zu werden.

Kann mir bitte jemand helfen, dies zu verstehen? Was muss ich tun, wenn ich ein eigenes Programm mit einigen Parametern ausführen möchte?

Antwort

17

UNIX, wo alle diese exec Dinge herkommen, trennte die ausführbare Programmdatei vom Programmnamen, so dass Ihr Prozess einen beliebigen Namen haben konnte. Das erste Argument ist das Programm, das ausgeführt wird. Dies muss existieren. Das nächste Argument ist, was Ihr Prozess, der das Programm ausführt, genannt wird,, was in argv[0] sein wird, und was in der ps (Prozessliste) Ausgabe kommt.

Also, wenn ich es tue (in C, aber es Karten zu Python als auch):

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

Dies würde das Programm ausführen /usr/bin/sleep aber es würde als notsleep in der Prozessliste angezeigt. argv[0] wäre notsleep und argv[1] (das eigentliche Argument) wäre 60. Oft sind die ersten beiden Parameter identisch, aber es ist keineswegs erforderlich.

Deshalb wird das erste Argument Ihrer Liste (scheinbar) ignoriert. Es ist der Name, der dem Prozess nicht das erste Argument zu geben ist.

Ein richtiger Weg, es würde zu tun:

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