Betriebssystembefehle

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
freehand

Hallo,

in PHP gibt es funktionen mit denen man Betriebssystembefehle absetzen kann (exec(),passthru()...).

Gibt es so etwas ähnliches auch in Python? Ich habe dazu leider nichts gefunden. Ein kleiner Tip wäre nett.

Gruß freehand
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi freehand,

jo da gibts jede Menge, schau mal ins Modul os

Gruß

Dookie
Gast

Hallo,

ich habe jetzt z.B. folgendes gemacht:

Code: Alles auswählen

os.execv('/usr/lib/java/bin/', ['-jar', '-Djava.awt.headless=true', '../batik-1.5/batik-rasterizer.jar', '-m image/jpeg', '-q 0.99', '../batik-1.5/svg1.svg'])
Das sollte nun Java starten und die mit den Argumenten auführen...

Ich bekomme aber immer diese Fehlermeldung:

OSError: [Errno 13] Permission denied

Muss ich da noch was Einstellen damit Python sowas überhaupt darf?
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Ich würde eher zu popen(), popen2(), etc. aus auch aus dem Modul OS zurückgreifen. Wenn dann Fehler ausgegeben werden, kann man diese ausgeben.

Permission denied deutet aber darauf hin, dass du wohl nicht ausreichende Berechtigungen hast um den Befehl auszuführen. Kannst du den Befehl

Code: Alles auswählen

/usr/lib/java/bin/', ['-jar', '-Djava.awt.headless=true', '../batik-1.5/batik-rasterizer.jar', '-m image/jpeg', '-q 0.99', '../batik-1.5/svg1.svg']
denn direkt in einer Shell absetzen? Führst du das ganze etwa als CGI Script aus?

Hans
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi,

/usr/lib/java/bin/ ist sicher keine ausführbare Datei sondern ein Verzeichnis!


Gruß

Dookie
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wie wärs mit

Code: Alles auswählen

os.system(befehl)
alternativ (mit stdInOut umleitung) auch die popen befehle aus os.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
freehand

/usr/lib/java/bin/ ist sicher keine ausführbare Datei sondern ein Verzeichnis
:oops: das stimmt, habe hier was falsches gepostet. ich meinte /usr/lib/java/bin/java...

aber java läßt sich wohl nicht über cgi starten. zumindst. findet er bei mir seine "umgebung" nicht... deshalb starte ich jetzt ein bash script.

aber egal was für einen befehl ich benutze, ich bekommte immer "Permission denied".

es klappt jetzt bei mir nur so:

Code: Alles auswählen

if os.fork()==0:
  os.execv('/bin/bash', ('','/home/www/web8/html/session/%s_svg2jpg.sh'%sessionid))
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hat dein Python interpreter auch die richtigen rechte dazu? (Als was für ein user läuft der denn?)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
freehand

Wo kann ich das denn sehen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wenn es als CGI/mod_python programm im kontext deines Webservers läuft dann musst du schauen als was für ein User dein Apache läuft und dann die berechtigungen anpassen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten