Autor
|
Thema: Job starten mittels Python (3873 mal gelesen)
|
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 15. Feb. 2008 14:52 <-- editieren / zitieren --> Unities abgeben:
Liebe Gemeinde, im Zuge einer Optimierungsaufgabe versuche ich, einen Job aus einem Python-Script heraus zu starten. Hierzu möchte ich allerdings kein CAE verwenden (da die Zahl der Lizenzen bei uns stark beschränkt ist). Man korrigiere mich, wenn folgende Aussage falsch sein sollte: Ohne CAE im Hintergrund mitlaufen zu lassen, funktioniert der Code
Code:
import job ... submit(meinJobname.inp) waitForCompletion(meinJobname.inp)
nicht. Zumindest bekomme ich beim Versuch, ihn ohne CAE laufen zu lassen, eine Fehlermeldung "ImportError: No module named job".Meine Idee war nun folgende:
Code:
import os ... os.system('abaqus job=meinJobname.inp cpus=xxx')
Dies funktioniert soweit ganz gut, jedoch möchte ich den Jobnamen automatisiert im Script ändern. Das heißt, ich will eine For-Schleife programmieren, die mir eine fortlaufende Nummer an den Dateinamen hängt. Beispielsweise also "meinJobname_1.inp", "meinJobname_2.inp", "meinJobname_3.inp" und so weiter. Nun ergibt sich aber das Problem, dass ich den Jobnamen, den ich im Python-Script erzeuge, nicht an die "Kommandozeile" übergeben kann. Der Code
Code:
DasHierWillIchBerechnenLassen = 'meinJobname_23.inp' os.system('abaqus job=DasHierWillIchBerechnenLassen cpus=xxx')
funktioniert also nicht. Bei der Ausführung fragt der Abaqus-Solver nach der input-Datei, er hat also keine Datei "DasHierWillIchBerechnenLassen.inp" gefunden.Hat hierzu jemand einen Lösungsvorschlag? Ich würde mich über jegliche Vorschläge freuen. MfG HerrHansen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
milasan Mitglied
Beiträge: 165 Registriert: 24.04.2007
|
erstellt am: 15. Feb. 2008 14:57 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Das job-modul gehört zu CAE, dh. Du kannst es nur aus CAE aufrufen. Dein Code könnte so aussehen: abaquscommand = 'abaqus job=' jobname = 'meinJobname_23.inp' oscommand = abaquscommand + jobname os.system(oscommand) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 15. Feb. 2008 15:08 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Probier mal statt: DasHierWillIchBerechnenLassen = 'meinJobname_23.inp' os.system('abaqus job=DasHierWillIchBerechnenLassen cpus=xxx') das hier: DasHierWillIchBerechnenLassen = 'meinJobname_23.inp' os.system('abaqus job= '+DasHierWillIchBerechnenLassen+' cpus=xxx') So werden Strings aus Text und Variablen verknüpft. Das Problem ist aber, dass dann das waitForCompletion(meinJobname.inp) nicht funktionieren wird. Das ist glaube ich ein CAE-eigener Befehl. Du musst wahrscheinlich einen anderen Weg finden das Script pausieren zu lassen.
[Diese Nachricht wurde von Mustaine am 15. Feb. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 15. Feb. 2008 17:18 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Mir ist grad eingefallen dass das hier gehen müsste um das Script zu pausieren: DasHierWillIchBerechnenLassen = 'meinJobname_23.inp' os.system('abaqus job= '+DasHierWillIchBerechnenLassen+' cpus=xxx interactive') print 'Job '+DasHierWillIchBerechnenLassen+' beendet' Durch das "interactive" bleibt das Command-Fenster gesperrt bis der Job fertig ist und das Script muss solange warten um den print-Befehl auszuführen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 16. Feb. 2008 12:40 <-- editieren / zitieren --> Unities abgeben:
|
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 18. Feb. 2008 08:13 <-- editieren / zitieren --> Unities abgeben:
|
Nicksen Mitglied wissenschaftlicher Mitarbeiter
Beiträge: 239 Registriert: 04.05.2007
|
erstellt am: 18. Feb. 2008 12:38 <-- editieren / zitieren --> Unities abgeben: Nur für HerrHansen
Also ich hab hier ein script das funktioniert und auch mehrere Jobs hintereinander ausfuehrt: mdb.Job(name=Job_name, model=myModel_str,) #Job wird erzeugt mdb.jobs[Job_name].submit() #Job wird abgeschickt mdb.jobs[Job_name].waitForCompletion() Das script wird als CLI im Command- Line- Interface von Cae ausgefuehrt.
Vielleicht hilft das ja auch noch weiter. beste Grueße Nick ------------------ ========== == Dingsen == ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrHansen Mitglied Dipl.-Ing.
Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 18. Feb. 2008 16:57 <-- editieren / zitieren --> Unities abgeben:
|