2010-08-01 12 views
5

Ich möchte den aktuellen Prozess mit einem neuen ersetzen mit Os.exec, das funktioniert gut, es sei denn, Sie haben keine Argumente.os.execv ohne Argumente Argument

Wie kann ich das aufrufen, auch wenn ich keine Argumente habe, die an den Prozess übergeben werden, den ich starten möchte?

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

Antwort

6

Okay, nachdem im IRC fragen sie wies darauf hin, warum es so funktioniert.

Das erste Argument (arg0) ist normalerweise der Dateiname dessen, was Sie gerade ausführen (sys.argv [0]), also sollte das erste Argument immer der Dateiname sein.

Dies erklärt, warum die Argumente nicht optional sind, auf IRC sagten sie, dass arg0 ist, was die App ihren Namen denken wird.

1

Dies funktioniert für mich

os.execv('process',()) 

sind Sie sicher, dass Ihre process Arbeit ohne Argumente?

Oder versuchen execl

os.execl('process') 
+0

Das wird einen Fehler, dass das Tupel für mich leer ist (in Python 2.7), und ja, ich weiß, dass es ohne Argumente funktioniert, ist es ein py2exe-Paket. –

+0

Ich benutze 2,5, so dass das Problem sein kann. Hast du es mit execl() versucht? –

+0

Scheint, dass execl execv hinter den Kulissen verwendet: http://pastebin.com/W1YKpxe7 –

5

Diese drei Varianten können das Problem zu beheben:

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

Normalerweise ist der erste Parameter einer Argumentliste (sys.argv) ist der Befehl, der verwendet wurde, um die Anwendung aufzurufen. So ist es besser, einen von denen zu verwenden:

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

os.exec* documentation on python.org

+1

Dies ist eine korrekte Antwort, Argument im Index 0 ist der Name des Programms –

Verwandte Themen