Hallo!
Leider habe ich noch keine großen Erfahrungen im Python programmieren!
Dadurch habe ich auch folgendes Problem:
Ich starte in einem Pyhton-basierendem Programm ein einen Solver-Run (in einem externen Programm) und diesen würde ich ganz gerne abwarten, bis der nächste Schritt bearbeitet wird.
Hat jemand eine Ahnung wie ich das anstelle?
popen.wait()
popen.communicate()
??
??
Danke, viele Grüße
Benz
Subprozess - Wait
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
[mod]subprocess[/mod] ist dein Freund.
Wenn du den output nicht brauchst, call, ansonsten dieses Snippet.
Wenn du den output nicht brauchst, call, ansonsten dieses Snippet.
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Hallo!
Danke!
aber bei mir fehlts da bezüglich phyten-programmierung weiter...sorry
wenn ich das propiere kommt folgendes:
Traceback (most recent call last):
File "<input>",line1, in<module>
File "subprocess.py", line 595, in __init__
File "subprocess.py",line 804, in _execute_child
WindowsError: [Error 2] The system cannot find the file specified
Kann mit hier jemand ein kurzes Bsp zeigen???
Danke!
Danke!
aber bei mir fehlts da bezüglich phyten-programmierung weiter...sorry
wenn ich das propiere kommt folgendes:
Traceback (most recent call last):
File "<input>",line1, in<module>
File "subprocess.py", line 595, in __init__
File "subprocess.py",line 804, in _execute_child
WindowsError: [Error 2] The system cannot find the file specified
Kann mit hier jemand ein kurzes Bsp zeigen???
Danke!
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Rebecca hat Dir doch Beispiele verlinkt!
Die Fehlermeldung deutet darauf hin, dass Du einfach ein Programm aufrufst, dass nicht ausgeführt werden kann:
(Hier eben auf einer Linux-Plattform)
Das Programm muss also entweder im Suchpfad des OS stehen, oder Du musst den Pfad zum Programm spezifizieren.
Die Fehlermeldung deutet darauf hin, dass Du einfach ein Programm aufrufst, dass nicht ausgeführt werden kann:
Code: Alles auswählen
In [82]: import subprocess
In [83]: subprocess.Popen("mich_gibts_nicht.exe")
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
/home/nelson/src/Python/old/karten/<ipython console> in <module>()
/usr/lib/python2.6/subprocess.pyc in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
593 p2cread, p2cwrite,
594 c2pread, c2pwrite,
--> 595 errread, errwrite)
596
597 if mswindows:
/usr/lib/python2.6/subprocess.pyc in _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite)
1090 if fd is not None:
1091 os.close(fd)
-> 1092 raise child_exception
1093
1094
OSError: [Errno 2] No such file or directory
Das Programm muss also entweder im Suchpfad des OS stehen, oder Du musst den Pfad zum Programm spezifizieren.
Hallo!
Danke für die Antwort!
Aber Sorry, ich stehe da einfach an..
ich möchte einen Nastran.Solver aufruf über Pyhton starten!
das funktioniert auch, indem ich einfach:
Model1_car['allsel'].solve()
eingebe!
Dann läuft der Solver-Prozess los...
jetzt will ich einfach, das das Programm wartet bis dieser Aufruf fertig ist!
Wenn ich da schreibe: subprocess.Popen("Modell1_car['allsel'].solve()")
funktioniert dies nicht....
Entschuldige bitte die dumme frage..aber...
Danke für die Antwort!
Aber Sorry, ich stehe da einfach an..
ich möchte einen Nastran.Solver aufruf über Pyhton starten!
das funktioniert auch, indem ich einfach:
Model1_car['allsel'].solve()
eingebe!
Dann läuft der Solver-Prozess los...
jetzt will ich einfach, das das Programm wartet bis dieser Aufruf fertig ist!
Wenn ich da schreibe: subprocess.Popen("Modell1_car['allsel'].solve()")
funktioniert dies nicht....
Entschuldige bitte die dumme frage..aber...
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Das haettest du ja schonmal eher sagen koennen...Model1_car['allsel'].solve()
Du willst also nicht direkt einen externen Prozess starten, sondern benutzt eine Library dafuer. Dann hat diese Library entweder die Funktion die du brauchst, oder eben nicht. Wenn du uns verraetst, was fuer eine Library du benutzt, kann die vlt. jemand die Antwort sagen.
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das sieht mir nach einem Python-Konstrukt aus - nicht nach einem Programmstart! Sehe ich das richtig?Benz hat geschrieben: Model1_car['allsel'].solve()
Ich glaube Du hast nicht verstanden, was subprocess ermöglicht. Damit kann man externe Programm starten.
Was passiert denn wenn Du das obige in einem Python-Script aufrufst? Woran erkennst Du, ob solve() noch arbeitet, während Dein Script weiterläuft?jetzt will ich einfach, das das Programm wartet bis dieser Aufruf fertig ist!
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Sorry, aber so kommen wir nicht weiter!
Du musst uns erst einmal möglichst detailliert erklären, was Du willst, wie Du es bisher umgesetzt hast und vor allem welche Rahmenbedingungen bei Dir herrschen!
Woher stammt "Model1_car"? Um welches Themengebiet handelt es sich? Woher weißt Du, dass es eine .solve() Methode gibt?
Du musst uns erst einmal möglichst detailliert erklären, was Du willst, wie Du es bisher umgesetzt hast und vor allem welche Rahmenbedingungen bei Dir herrschen!
Woher stammt "Model1_car"? Um welches Themengebiet handelt es sich? Woher weißt Du, dass es eine .solve() Methode gibt?
Ok...
ich bin da ein ziemlich primitiver Anwender der einfach ein Unterprogramm in Nastran laufen hat. dieses Unterprogramm kann einige Parameter definieren und ändern und dann eben diesen Solver-run starten.
Das es diesen .solver() Befehl gibt, weiß ich daher, da dieses Unterprogramm ein Befehlsskript ausgibt, von welchem ich einfach diesen Befehl rauskopiert habe!
die anderen Befehle sind für mich klar verständlich, definition der Koordinatensysteme, Eigenschaften von Mateialien...
jedoch ist dort nichts von irgendwelchen import... zeugs was zu sehen. (ausser, dass das model importiert wird..)
so und nun stehe ich da..und habe keine Ahnung!
bisher habe ich das mit dem time.sleep(Wartezeit) Befehl gelöst - funktioniert, ist aber nicht im Sinne des Erfinders....
ich weiß nur, dass Python 2.6.2 verwendet wird..
ich bin da ein ziemlich primitiver Anwender der einfach ein Unterprogramm in Nastran laufen hat. dieses Unterprogramm kann einige Parameter definieren und ändern und dann eben diesen Solver-run starten.
Das es diesen .solver() Befehl gibt, weiß ich daher, da dieses Unterprogramm ein Befehlsskript ausgibt, von welchem ich einfach diesen Befehl rauskopiert habe!
die anderen Befehle sind für mich klar verständlich, definition der Koordinatensysteme, Eigenschaften von Mateialien...
jedoch ist dort nichts von irgendwelchen import... zeugs was zu sehen. (ausser, dass das model importiert wird..)
so und nun stehe ich da..und habe keine Ahnung!
bisher habe ich das mit dem time.sleep(Wartezeit) Befehl gelöst - funktioniert, ist aber nicht im Sinne des Erfinders....
ich weiß nur, dass Python 2.6.2 verwendet wird..
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ok, zu erst einmal: Hier weiß sicherlich kaum jemand, was Nastran eigentlich ist! Es wäre daher eine gute Idee, zunächst einmal zu erklären, was Nastran ist und kurz, was Du darin machen möchtest.
http://de.wikipedia.org/wiki/Nastran
Liege ich damit richtig?
Wie kannst Du denn festellen, dass .solver() nicht fertig ist?
Bist Du Dir sicher, dass es keine Doku dazu gibt?
http://de.wikipedia.org/wiki/Nastran
Liege ich damit richtig?
Ok, was genau bedeutet das? Wie wird denn da ein Script aufgerufen? Passiert das innerhalb des Programms? (z.B. über ein Menü?) Was heißt "Unterprogramm"?ich bin da ein ziemlich primitiver Anwender der einfach ein Unterprogramm in Nastran laufen hat
Wie kannst Du denn festellen, dass .solver() nicht fertig ist?
Bist Du Dir sicher, dass es keine Doku dazu gibt?
Hallo!
Ja mit Nastran liegst du richtig...ein FE-Solver!
für diesen Solver habe ich nun ein Python-Skript basierendes Unterprogramm. Dieses kann ich einfach über einen DOS-Befehl ausführen.
Dann läuft dieses Python -Skript ab (ich kann dieses in einem normalen "Text"-Editor verändern) Sprich die Definitionen variieren!
Am Ende dieses Skripts steht der .solve() aufruf (habe ich selbst eingefügt) und funktioniert auch...Erkennbar daran, das der NAstran-Solver im Batch-Run aufblobbt..und durchrechnet..dann geht er zu und das Ergebnis ist da!
mein Problem dabei ist dann, dass das Unterprogramm ohne abzuwarten wie das Ergebnis ist, einfach weiterläuft und quasi alles zurück an Nastran gibt! Das möchte ich nicht!
ich möchte das er wartet, bis dieser .solver() - Aufruf fertig ist (Wie gesagt bisher mit sleep gelöst, dafür muss ich aber immer wissen wie lange der Solver-Run läuft! )
Ja mit Nastran liegst du richtig...ein FE-Solver!
für diesen Solver habe ich nun ein Python-Skript basierendes Unterprogramm. Dieses kann ich einfach über einen DOS-Befehl ausführen.
Dann läuft dieses Python -Skript ab (ich kann dieses in einem normalen "Text"-Editor verändern) Sprich die Definitionen variieren!
Am Ende dieses Skripts steht der .solve() aufruf (habe ich selbst eingefügt) und funktioniert auch...Erkennbar daran, das der NAstran-Solver im Batch-Run aufblobbt..und durchrechnet..dann geht er zu und das Ergebnis ist da!
mein Problem dabei ist dann, dass das Unterprogramm ohne abzuwarten wie das Ergebnis ist, einfach weiterläuft und quasi alles zurück an Nastran gibt! Das möchte ich nicht!
ich möchte das er wartet, bis dieser .solver() - Aufruf fertig ist (Wie gesagt bisher mit sleep gelöst, dafür muss ich aber immer wissen wie lange der Solver-Run läuft! )
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ok. Das kann man ohne Dokumentation nicht lösen. Vermutlich initiiert solve() einen Thread, der parallel zum Unterprogramm abläuft. Es kann ja bei einer langen Berechnung erwünscht sein, dass der Rest weiterläuft. Evtl. kann man das Verhalten per Parameter steuern. Aber dazu bedarf es der Doku von der Python API dieses Nastran-Tools!