使用ABAQUS PYTHON2.6.2将变量传递给PYTHON脚本文件 [英] passing variables to a python script file using abaqus python 2.6.2

查看:49
本文介绍了使用ABAQUS PYTHON2.6.2将变量传递给PYTHON脚本文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过命令行将变量传递给abaqus脚本文件(.psf)。每次执行另一个脚本时都会进行命令行调用,并且每次调用中的变量具有不同的值。在这方面,我可以得到关于要使用的命令语法的帮助吗?我尝试了os.systemsubprocess.Popen,但都出现了某种错误。

在我的主脚本(.py文件)中,它调用.psf

Xa=150000
abaqusCall = 'abaqus script=tt_Par.psf'
runCommand = 'cmd.exe /c ' + abaqusCall
process = subprocess.Popen(runCommand, cwd=workDir, args=Xa)

和.psf中

它接受以下格式的变量..

import sys,os

for item in sys.argv
    x1 = sys.argv[0]
    x2 = sys.argv[1]
    print x1,x2

有人能在这方面指点一下吗?

推荐答案

参加聚会很晚,但我还需要使用传入和传出系统的变量来调用ABAQUS脚本。我的主要脚本是Py3,但Abaqus(2021)仍然使用Py27。您不必担心,只要您的模型脚本是在py27中,您仍然可以使用py3调用该命令。

我需要在与py3主脚本不同的目录中运行我的模型脚本,因此在主脚本中我有:

aba_dir = PATH_TO_DIRECTORY_IN_WHICH_I_WANT_ABAQUS_FILES (.odb, .cae etc.)
script_dir = DIRECTORY_FOR_MODEL_SCRIPT (build_my_model.py - this is py27 script)

job_name = call_cae(cwd, aba_dir, script_dir, var1, var2, var3)

以下函数用于生成正确的命令:

定义是调用CAE查看器还是调用ODB查看器的函数:

def caller_type(cae):
#DIFFERENTIATE BETWEEN CAE AND VIEWER
if cae:
    caller = 'abaqus cae noGui='
else:
    caller = 'abaqus viewer noGui='
return caller

使用变量生成命令字符串的函数:

def build_command_string(script, cae, *args):
# ## GET THE CAE/VIEWER CALLER
caller = caller_type(cae)
# ##CREATE STRING REPRESENTING ABAQUS COMMAND
caller = caller + script
# ##STRING ALL ARGUMENTS AS INDIVIDUAL ITEMS
str_args = [str(arg) for arg in args]
# ##CREATE COMMAND INITIALISER WITH CALLER
c = ['cmd.exe', '/C', caller, '--']
# ##APPEND STRING ARGS TO COMMAND LIST
for arg in str_args:
    c.append(arg)
# ##RETURN COMMAND LIST
return c

将命令提交到系统并返回作业名称的函数:

def call_cae(cwd, aba_dir, script, *args):
# SET CAE TO TRUE
cae = True
# CHANGE TO OUTPUT DIRECTORY
os.chdir(aba_dir)
# ##BUILD COMMAND STRING
command = build_command_string(script, cae, *args)
# ##RUN SUBPROCESS COMMAND
p1 = subprocess.run(command,
                    stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE,
                    text=True)
# ##RETURN TO ORIGINAL WORKING DIRECTORY (MAIN FILE)
os.chdir(cwd)

if p1.stdout == None or p1.stdout == '':
    # ##RETURN JOB NAME
    job_name = p1.stderr[p1.stderr.rfind('
'):].strip('
')
else:
    # ##RETURN JOB NAME
    job_name = p1.stderr[p1.stderr.rfind('
'):].strip('
')
    # ##PRINT STATEMENT TO CHECK CONVERGANCE
    print('This job exited with error')
return job_name

在我的代码中构建和执行我指定的ABAQUS模型:

sim_num = int(sys.argv[-3]) #var1
E = float(sys.argv[-2]) #var2
nu = float(sys.argv[-1]) #var3

在我的脚本末尾 Sys.stderr.WRITE(cJob.name)#

这在我的PyCharm上是有效的,在主文件中有Py3,在‘Build and Execute Model.py’文件中有Abaqus python27。希望对其他人也有帮助。现在开始为ODB输出创建命令!

这篇关于使用ABAQUS PYTHON2.6.2将变量传递给PYTHON脚本文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆