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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Antworten