Seite 1 von 1

os.exec mit versch. Argumenten - 1 Argument nicht erkannt

Verfasst: Freitag 20. März 2015, 18:05
von CM
Hallo,

war schon lange nicht mehr im Forum - Arbeit und Familie hielten mich ab ...

Na ja. jedenfalls benötige ich unter Linux für einen HPC-Scheduler ein Anpassungsscript für eine best. Queue. Ziel ist es das gegebene Programm in dieser Queue mit den gegebenen Argumenten auszuführen und die Umgebung zu beenden. Das Anpassungsscript läuft unter Python 2.6.6 und soll unmittelbar nach Ausführung durch das gewünschte Programm ersetzt werden.

Ich versuche:

Code: Alles auswählen

os.execvpe(cmd, args, os.environ)
Wobei 'cmd' für das auszuführende Kommando (Skript oder binäres Executable) steht, 'args' für seine Argumente und os.environ natürlich für die mitzugebene Umgebung.

Das funktioniert auch ganz gut, wenn das Kommando ein Skript ist. Handelt es sich jedoch um ein binäres Executable werden alle Argumente erkannt - bis auf das letzte, was in diesem Fall ein Konfigurationsfile ist. Hat irgendjemand eine Idee, was da los sein könnte bzw. wie man sinnvoll testen kann, was los ist? Ich habe bereits einen Debugmode ins Skript eingebaut und geschaut, dass alle Argumente auch wirklich in der korrekten Reihenfolge in 'args' stehen. Außerdem habe ich das Konfigurationsfile schon als absoluten Pfad mitgegeben - kein Effekt.

Bin über jede abgefahrene Idee dankbar - wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht, doch ich knabbere schon eine Weil an dem Problem.

Besten Gruß,
Christian

Re: os.exec mit versch. Argumenten - 1 Argument nicht erkann

Verfasst: Freitag 20. März 2015, 19:26
von Sirius3
@CM: beim ersten Argument würde ich sagen, Du hast vergessen, cmd als 0. Argument zu übergeben. Aber beim Letzten? Tut das Skript von der Commandozeile das was es soll?

Re: os.exec mit versch. Argumenten - 1 Argument nicht erkann

Verfasst: Montag 23. März 2015, 08:10
von CM
Das ist zwar ein wenig von hinten durch die Brust ins Auge gedacht, denn warum sollten die Argumente zweifach übergeben werden, aber in der Tat: Statt os.execvpe os.execve nehmen und es funktioniert.

Wer lesen kann ist halt klar im Vorteil - und wer wie ich so nett aufs Offensichtliche gestupst wird.

Danke,
Christian