Betriebssystembefehle

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

Dienstag 18. Mai 2004, 15:31

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:

Dienstag 18. Mai 2004, 16:36

Hi freehand,

jo da gibts jede Menge, schau mal ins Modul os

Gruß

Dookie
Gast

Montag 24. Mai 2004, 09:05

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:

Montag 24. Mai 2004, 21:20

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:

Montag 24. Mai 2004, 22:21

Hi,

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


Gruß

Dookie
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 25. Mai 2004, 13:46

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 Modvoice
freehand

Donnerstag 27. Mai 2004, 14:24

/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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 27. Mai 2004, 20:26

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 Modvoice
freehand

Freitag 28. Mai 2004, 08:43

Wo kann ich das denn sehen?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 28. Mai 2004, 13:28

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 Modvoice
Antworten