9 Stimmen

os.execv ohne args-Argument

Ich möchte den aktuellen Prozess durch einen neuen ersetzen, indem ich os.execv verwende. Das funktioniert gut, solange man keine Argumente hat.

Wie kann ich dies aufrufen, auch wenn ich keine Argumente an den Prozess, den ich starten möchte, übergeben kann?

# Works fine, unless the arguments tuple wouldn't exist or be empty
os.execv('process.exe', ('arg1', 'arg2'))

15voto

phobie Punkte 2376

Mit diesen drei Varianten kann das Problem gelöst werden:

cmd = '/usr/bin/vi'
os.execv(cmd, (' ',))
os.execv(cmd, [' '])
os.execl(cmd, '')

Normalerweise ist der erste Parameter einer Argumentliste (sys.argv) der Befehl, mit dem die Anwendung aufgerufen wurde. Es ist also besser, einen dieser Befehle zu verwenden:

cmd = '/usr/bin/vi'
os.execv(cmd, (cmd,))
os.execv(cmd, [cmd])
os.execl(cmd, cmd)

os.exec*-Dokumentation auf python.org

7voto

Not Available Punkte 2885

Okay, nachdem ich im IRC nachgefragt habe, wurde mir erklärt, warum das so funktioniert.

Das erste Argument (arg0) ist normalerweise der Dateiname des auszuführenden Programms (z. B. sys.argv[0]), also sollte das erste Argument immer der Dateiname sein.

Das erklärt, warum die Argumente nicht optional sind. Im IRC wurde gesagt, dass arg0 das ist, was die Anwendung für ihren Namen hält.

1voto

Vinko Vrsalovic Punkte 252104

Das funktioniert bei mir

os.execv('process',())

Sind Sie sicher, dass Ihr process ohne Argumente arbeiten?

Oder versuchen Sie execl

os.execl('process')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X