Python Programm in Python ausführen

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
spike_1895
User
Beiträge: 9
Registriert: Sonntag 29. Mai 2011, 19:06

Hi leute
ich habe eine Frage kann man ein Pythonprogramm in einem Pythonprogramm ausführen?
also ein normales programm kann man mit

Code: Alles auswählen

import subprocess
          p =  subprocess.Popen([r"C:\...\programm.exe", "-h"], stdout=subprocess.PIPE)
          p.wait()
          print p.stdout.read()
ausführen
aber immer wenn ich das mit einem Pythonprogramm mache, funktioniert das nicht
gibt es ein modul mit dem man ein Pythonprogramm in einem pythonprogramm ausführen kann?
schonmal Danke
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

spike_1895 hat geschrieben:Hi leute
ich habe eine Frage kann man ein Pythonprogramm in einem Pythonprogramm ausführen?
also ein normales programm kann man mit

Code: Alles auswählen

import subprocess
          p =  subprocess.Popen([r"C:\...\programm.exe", "-h"], stdout=subprocess.PIPE)
          p.wait()
          print p.stdout.read()
ausführen
aber immer wenn ich das mit einem Pythonprogramm mache, funktioniert das nicht
gibt es ein modul mit dem man ein Pythonprogramm in einem pythonprogramm ausführen kann?
schonmal Danke
Das funzt schon - da Windows im Moment keinen Shebang versteht, musst Du halt den Interpreteraufruf davor setzen. Letztlich hättest Du darauf ja selber kommen können, da Du das ja in einer Shell selber so machen musst.

Die Frage wäre natürlich, ob das an dieser Stelle der sinnvolle Weg ist, oder es sich nicht anbietet, das Programm als Modul zu importieren und die entsprechende Funktion direkt aufzurufen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Der Pfad zum gerade laufenden Interpreter ist übrigens an `sys.executable` gebunden. Dann muss man den nicht hart in das Programm schreiben.
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

Mal ne Frage, kann man es nicht einfach als modul hinterlegen und dann importieren? So wäre es auf jeden Fall bequemer
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Was willst du denn ausführen? Was eigenes? Dann mach doch eine main(), die du dann aufrufst.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
spike_1895
User
Beiträge: 9
Registriert: Sonntag 29. Mai 2011, 19:06

Ich habe vor login auszuführen, den ich mit PythonCard gemacht habe und noch eine
Animation mit pygame.
Das problem ist nur, wenn ich das pygamefenster schließe, ob jetzt per kreuz oder im Code per sys.exit
schließe ich alle anderen offenen Fenster, Animationen usw..
@ Hyperion: Was meinst du mit interpreteraufruf,wie geht das und ich muss das vor meiner shell,also
IDLE nicht davorsetzten
@BlackJack: Das ist warscheinlich der Interpreteraufruf, aber was soll ich mit dem machen?Wie soll ich das machen?
ich hab mir das mal in der idle help angeguck,verstehe aber kein Wort
@jbs: was meinst du mit main()
Schonmal Danke
alexskiwalker
User
Beiträge: 1
Registriert: Sonntag 22. Januar 2012, 23:59

So must du's machen:

import subprocess
p = subprocess.Popen([r"C:\...\run.bat", ""], stdout=subprocess.PIPE)
p.wait()
print p.stdout.read()

und danach in die Windows Batchdatei reinschreiben, dasser zb Hallo.py mit Python ausführen soll:

start Hallo.py Python
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo und Willkommen im Forum!

bitte verwende doch für Code die Code-Tags, für Python-Code die speziellen Python-Code-Tags. Damit bleibt die Einrückung erhalten und das ist ja ein wesentliches Syntaxelement von Python.

Wieso schlägst Du eine eher umständliche Lösung vor? Es gab ja schon zwei Vorschläge, die vom OP irgend wie ignoriert wurden. Deine Lösung bietet keine sichtbaren Vorteile, eher schon Nachteile (zusätzliche Batch-Datei).

Als letztes ist fraglich, ob der OP an dem Thema noch Interesse hat - der Thread stamm ja aus dem August letzten Jahres!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

kurze Frage dazu, wollte kein neues Thema eröffnen.

kann ich einen per Popen aufgerufene .bat mit Variablen füttern?
Mein Problem: Win 7 lässt es nicht zu, per Python, Ordner umzubenennen Error 5 - Zugriff verweigert.
Um dies nicht weiter zu verkomplizieren will ich einfach "ren" benutzen.

Code: Alles auswählen

from subprocess import Popen

ordner = pfad
order_neu = pfad + neuer Name

subprocess.Popen("pfad/cmd.exe ren" + ordner + ordner_neu)
würde dies funktionieren? hab erst morgen Zeit dies auszuprobieren und vielleicht hat ja einer damit bereits Erfahrung sammeln können ;)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dami123 hat geschrieben:kurze Frage dazu, wollte kein neues Thema eröffnen.
Ein Jahr nach dem letzten Post mit einem komplett unverwandten Problem darfst du das ruhig machen.

Und nein es wuerde nicht funktionieren, folgendes aber:

Code: Alles auswählen

subprocess.Popen('ren %s %s' % (old, new), shell=True)
Wenn du aber `old` und `new` nicht komplett unter Kontrolle hast, also von einer Benutzereingabe/-konfiguration abhaengt, solltest du davon die Finger lassen, Details gibts in der `subprocess` Dokumentation.
Antworten