Seite 1 von 1
Programm ausführen und ergebnis auslesen!
Verfasst: Samstag 18. Dezember 2004, 17:01
von Iopodx
Hiho gemeinde!
Ich bin grad dabei ein prog zu coden das die php.exe aufruft und einen Dateinamen als Argument übergibt. Soweit ist das ja kein Problem. Nun möchte ich aber das Ergebnis der php.exe in einer Variable/Liste speichern.
Jemand ne Idee?
Bin über jede schnelle Antwort dankbar

Verfasst: Samstag 18. Dezember 2004, 17:55
von Milan
HI. Schau dir mal das Modul
subprocess an, bzw die Funktionen popen, popen3 und popen4 aus dem Modul
popen2/os . Damit kannst du Prozesse starten, die mit einer Pipe zu deinem Programm verbunden sind. Über die Pipe kannst du dann lesen und schreiben

. Hilfe findest du auch genug mit der Forensuche...
Verfasst: Samstag 18. Dezember 2004, 18:12
von Iopodx
Danke für die schnelle Antwort!
Schau ich mir gleich mal an.. was anderes:
wie übergebe ich Argumente ohne - ?
Denn die php.exe will die Datei ja in folgender Form haben:
c:\php.exe c:\test.php
aber python macht ja dann:
c:\php.exe -c:\test.php
gell?
Verfasst: Samstag 18. Dezember 2004, 19:13
von Leonidas
Geht denn sowas nicht:
Code: Alles auswählen
import subprocess
pipe = subprocess.Popen('C:\php.exe C:\test.php', shell=True, stdout=subprocess.PIPE).stdout
print pipe.read()
Verfasst: Samstag 18. Dezember 2004, 19:41
von Iopodx
Doch, danke
Habs gelöst..
so schaut das ganze aus:
Code: Alles auswählen
# -*- coding: cp1252 -*-
import os, sys
datei=sys.argv[1]
inhalt=os.popen("c:\php\php.exe "+datei).readlines()
datei=datei.split('.')
file=open(datei[0]+".html", 'w')
i=0
try:
while inhalt[i] !='':
inhalt[i] = inhalt[i].replace('\n', '<br> ')
file.write(inhalt[i])
i=i+1
except: pass
file.close()
os.startfile(datei[0]+".html")
Danke nochmal

Verfasst: Samstag 18. Dezember 2004, 19:57
von Leonidas
Jetzt muss ich
unbedingt Dookie-like Optimierungen anbringen

:
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import os, sys
try:
datei = sys.argv[1]
except IndexError:
print 'Dateiname fehlt'
sys.exit()
inhalt = os.popen("c:\php\php.exe " + datei)
datei = datei.split('.')
parsed = file(datei[0] + ".html", 'w')
for line in inhalt.readlines():
line = line.replace('\n', '<br> ')
parsed.write(line)
parsed.close()
inhalt.close()
os.startfile(datei[0] + ".html")
Edit: Werden durch subprocess eigentlich die anderen Methoden deprecated?
Edit: Ich habe im Code file gegen parsed getauscht, damit das
file() nicht überschrieben wird, das ich dann gleich mal statt
open() benutzt habe.
Verfasst: Samstag 18. Dezember 2004, 21:24
von Milan
Code: Alles auswählen
parsed.writelines(line.replace('\n', '<br> ') for line in inhalt)
parsed.close()
inhalt.close()
Gefällt mir besser
Leonidas hat geschrieben:Edit: Werden durch subprocess eigentlich die anderen Methoden deprecated?
Edit: Ich habe im Code file gegen parsed getauscht, damit das file() nicht überschrieben wird, das ich dann gleich mal statt open() benutzt habe.
Soweit ich gesehen habe: nein. Kann aber gut sein, da subprocess einfacher zu handhaben ist

Verfasst: Samstag 18. Dezember 2004, 22:02
von Leonidas
Milan hat geschrieben:Code: Alles auswählen
parsed.writelines(line.replace('\n', '<br> ') for line in inhalt)
parsed.close()
inhalt.close()
Gefällt mir besser

Ahh! Sehr schön, eine Generator Expression! Werde ich irgendwann auch noch
dokumentieren, oder möchtest du es machen, Milan? Das wäre sicher sehr hilfreich, vor allem für so Leute wie mich.
Milan hat geschrieben:Leonidas hat geschrieben:Edit: Werden durch subprocess eigentlich die anderen Methoden deprecated?
Soweit ich gesehen habe: nein. Kann aber gut sein, da subprocess einfacher zu handhaben ist

Aja. Aber so besonders sinnvoll finde ich diese Neuerung nicht, das war ja alles schon vorher drin, jetzt ist es halt doppelt.
Verfasst: Samstag 18. Dezember 2004, 22:14
von Milan
Hi. Naja, so gut dokumentieren kann ich nicht. Im grunde ists ja nichts anderes als eine Listcomprehension, bei der keine Liste erzeugt wird. Vielleicht reicht das als Erklärung schon

. Aber einen Unterschied gibt es noch: ein Iterator kann nur genau einmal durchlaufen werden und nur Element für Element, also kann nichts so einfach übersprungen werden wie bei einer liste mit Liste=Liste[::2] .
Verfasst: Samstag 18. Dezember 2004, 22:31
von Leonidas
Kann bei einer LC etwas übersprungen werden? Doch, schon, nicht war, es ist ja eine normale Liste?
Gut Milan, das ist doch immerhin schon etwas, und macht das Prinzip schon mal klarer.