可以将命令行参数传递给Abaqus Python吗?

8 投票
4 回答
7694 浏览
提问于 2025-04-18 00:35

我有一个在Abaqus中用的Python脚本,用来做参数研究。每次想要运行不同的选项时,都要进代码里去修改,真是太麻烦了。我希望能通过传递参数给脚本,这样就可以在不改代码的情况下运行不同的选项。

我想做的事情大概是这样的……

abaqus cae script='Script.py --verbose --data=someData.dat'

我试过上面的做法,也试过

abaqus python Script.py --verbose --data=someData.dat

但都没有成功。这真的有可能吗?

4 个回答

1

@Shickmeister 的回答正是我想要的,但为了让大家更清楚地了解问题的相关内容,最新版本的 abaqus 远远落后于最新版本的 python。现在的 abaqus 使用的是 python 2.6,这意味着 argparse 这个库是用不了的。我不得不改用已经不再推荐使用的 optparse 库。幸运的是,这两个库之间的差别不大。

2

这应该是可行的。我们来看一个例子,如果你尝试运行这样的命令:

abaqus python script.py 30 40

30和40是传给distance.py这个脚本的参数。在这个脚本的Python代码里,你应该把第一个参数当作:

import sys


def someFunction(x,y):

    #some code

    return someThing


if __name__ == "__main__":

   x = sys.argv[1]
   y = sys.argv[2]

   returnedVal = someFunction(x,y)

   print (returnedVal)
9

好发现,Schickmeister。对我来说,怎么实现这个还不太清楚,所以这里有个例子。

在命令提示符(cmd.exe)中启动 abaqus python。

abaqus cae noGUI

输入一些 python 代码。

>>>import sys
>>>print sys.argv
['C:\\ABAQUS\\6.13-2SE\\code\\bin\\ABQcaeK.exe', '-cae', '-noGUI', '-lmlog',     'ON', '-tmpdir', 'C:\\Windows\\TEMP']
>>>quit()

看看有多少个参数出现了?这就是我们需要获取最后一个参数的原因。现在用参数 "test.odb" 启动你的 python 脚本。

abaqus cae noGUI=odb_to_video.py -- test.odb

然后在你的脚本中获取最后一个参数,方法是:

odbname = sys.argv[-1]
myOdb = visualization.openOdb(path=odbname)

希望这能帮到你!

6

来自Abaqus脚本用户手册:

你可以通过在命令行中输入--,然后用一个或多个空格分开后面的参数,把参数传递给脚本。这些参数在Abaqus/CAE执行过程中会被忽略,但在脚本内部是可以使用的。想了解更多信息,可以查看“Abaqus/CAE执行”,在Abaqus分析用户手册的第3.2.5节,以及“Abaqus/Viewer执行”,在Abaqus分析用户手册的第3.2.6节。

撰写回答