我能否向Abaqus Python传递命令行参数?

8

我有一个用于参数研究的abaqus python脚本。每次想要运行不同选项时,进入代码并进行编辑非常繁琐。我希望能够传递脚本参数,这样我就可以在不需要更改代码的情况下运行不同的选项。

我想做这样的事情...

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

我已经尝试了上述方法,还尝试了其他方法

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

没有成功。这有可能吗?

请问您能否澄清一些事情?您是想了解如何在Python脚本中访问命令行参数,还是想了解如何添加命令行参数到Abaqus的语法? - austin-schick
4个回答

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节。


正是我所需要的,谢谢。既然你提到了,我记得读过那个,但当我再次阅读文档时,我却怎么也找不到它。 - grasingerm

2

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

abaqus python script.py 30 40

脚本distance.py将接受30和40作为参数。在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)

1
@Shickmeister的回答正是我所需要的,但为了让问题更加清晰,与问题相关的一切内容都要明确。目前abaqus使用的python版本远远落后于最新版本。Abaqus目前使用的是python 2.6版本,这意味着argparse不可用。我不得不转而使用已弃用的optparse库。幸运的是,两者之间的区别很小。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接