Marc调用Python脚本程序中关于目录操作的几个问题

发布于:2012-07-10 | 分类:finite element analysis


本文为作者在编写供Marc调用的Python脚本程序过程中,遇到的关于当前目录的几个问题及解决方法。

需求

通过Python脚本为Marc读入初始化数据,目录结构如下所示:

user_application
|- data
|  |- initial_data.txt
|-menu_command
|  |- marc_menu_newproject.py

其中,initial_data.txt为初始数据,marc_menu_newproject.py为脚本文件。

基本思路为:

  1. 获取当前脚本文件所在目录的上级目录,即data文件夹所在目录
  2. 用Marc内部命令*user_defined_read filename读取data下文件
user_dir = os.path.dirname(os.getcwd()) # 脚本目录
data_dir = user_dir + "\\data\\initial_data.txt"

ImportError: No module named os

当前Python版本为Marc安装时自带的Python 2.5,但是在python编辑器下直接运行import os不存在此问题。猜测原因为:实际调用Python脚本的是Marc程序,则由于Marc无法搜索到Python的os模块而导致错误。

解决方案:为Marc指定Python相关模块,即建立PYTHONPATH环境变量1,其值为Marc安装目录下Python库文件路径Lib

至此,第一个问题解决。

读入初始文件失败

数据文件的目标位置是\user_application\data\,实际上却定位向了错误位置C:\User\data\。这是因为上述代码期望通过os.getcwd()获取当前脚本文件所在目录,然而os.getcwd()获取的是当前目录——正在运行的Marc程序的目录,而不是Marc调用的脚本的目录2

解决方案:使用sys.path[0]获取当前脚本文件所在路径3

因此,修正后代码为:

user_dir = os.path.dirname(sys.path[0]) # 脚本目录
data_dir = user_dir + "\\data\\initial_data.txt"