提交作业,等待其完成并在提交另一个作业之后

2024-05-19 01:38:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要多次运行同一个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')

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


Tags: 文件therunname脚本getosjob
3条回答

我想这里的问题不在于子进程等待(实际上它在等待),而是在运行解算器之后,Abaqus需要几秒钟来删除一些临时文件并关闭它的odb。我建议你做以下选择之一:

  • 使用@glenn_gould建议的“交互式”从命令行运行解算器

    strCommandLine = 'abaqus interactive job=jobname'  
    subprocess.call(strCommandLine)
    
  • 运行abaqus python脚本

    strCommandLine = 'abaqus python ScriptToRun.py -- (jobname)'  
    subprocess.call(strCommandLine)
    

    在ScriptToRun.py中使用waitForCompletion()作为@ellumini建议的

    from abaqus import *
    import job
    import sys
    
    jobname = mdb.JobFromInputFile(sys.argv[-1], sys.argv[-1]+".inp") 
    jobname.submit() 
    jobname.waitForCompletion()
    
  • 当存在jobname.023或jobname.lck文件时,使用try语句运行,如下所示:

    strCommandLine = 'abaqus job=jobname'  
    subprocess.call(strCommandLine)
    
    while os.path.isfile('jobname.023') == True:
        sleep(0.1)
    

这是我在这个宏伟社区的第一个职位,我很高兴知道我是否做错了什么。

看看subprocess模块。call方法等待进程完成。您还可以比使用os.system()更好地控制子进程。

我认为您需要系统('abaqus job=inputfile.inp interactive')

在abaqus完成运行之前,interactive不会认为系统命令已完成。

当系统命令结束时,没有交互的abaqus在后台运行,我们已经转移到下一个,这是我们不想要的。

相关问题 更多 >

    热门问题