我需要多次运行相同的abaqus .inp文件(在运行中稍有更改),并且每次运行结束后,我都需要提交一个abaqus python脚本来读取结果。
我已经完成以下工作:
#run the programme
os.system('abaqus job=file_name cpus=2')
#get results and write them to myresults.txt
os.system('abaqus viewer noGUI=python_name.py')
Run Code Online (Sandbox Code Playgroud)
但是,主程序在第一行开始的程序结束之前执行第二行。结果我得到一个错误。我该如何解决?
我猜这里的问题不是等待子进程(实际上是等待),而是运行求解器后,Abaqus需要花费几秒钟来删除一些临时文件并关闭其odb的事实。我建议以下之一:
@glenn_gould建议使用“ interactive”从命令行运行求解器
strCommandLine = 'abaqus interactive job=jobname'
subprocess.call(strCommandLine)
Run Code Online (Sandbox Code Playgroud)运行一个abaqus python脚本
strCommandLine = 'abaqus python ScriptToRun.py -- (jobname)'
subprocess.call(strCommandLine)
Run Code Online (Sandbox Code Playgroud)
并在ScriptToRun.py中使用@ellumini建议的waitForCompletion()
from abaqus import *
import job
import sys
jobname = mdb.JobFromInputFile(sys.argv[-1], sys.argv[-1]+".inp")
jobname.submit()
jobname.waitForCompletion()
Run Code Online (Sandbox Code Playgroud)使用try语句在文件jobname.023或jobname.lck存在时运行,例如:
strCommandLine = 'abaqus job=jobname'
subprocess.call(strCommandLine)
while os.path.isfile('jobname.023') == True:
sleep(0.1)
Run Code Online (Sandbox Code Playgroud)这是我在这个宏伟社区中的第一篇文章,我很高兴知道我做错了什么。
小智 3
我认为你需要 system('abaqus job=inputfile.inp Interactive')
在 abaqus 完成运行之前,interactive 不会认为系统命令已完成。
如果没有交互式 abaqus 在后台运行,而系统命令结束,我们已经移动到下一个命令,这是我们不想要的。
| 归档时间: |
|
| 查看次数: |
26268 次 |
| 最近记录: |