提交作业,等待其完成,然后提交另一份作业

jpc*_*dre 4 python abaqus

我需要多次运行相同的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)

但是,主程序在第一行开始的程序结束之前执行第二行。结果我得到一个错误。我该如何解决?

Fra*_*ruz 5

我猜这里的问题不是等待子进程(实际上是等待),而是运行求解器后,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 在后台运行,而系统命令结束,我们已经移动到下一个命令,这是我们不想要的。