我正在开发一个python软件包,以简化与Cisco Unified Communications Manager的AXL API的SOAP通信。 CUCM不允许直接通过URL访问WSDL,相反,必须在本地下载WSDL。无需在安装软件包的每台计算机上下载WSDL,而是将其包含在软件包中。 CUCM的WSDL位于名为axlsqltoolkit
的文件夹中。为了测试功能,我创建了一个名为axl_connection.py
的小模块,它具有一个简单的功能:
import os
def wsdl():
os.startfile(os.path.join(os.getcwd(), 'axlsqltoolkit'))
然后,下载WSDL并将其放置在与axl_connection.py
相同的目录中。我创建了一个简单的test_axl_connection.py
脚本(在单独的目录中):
import from axl_connection import wsdl
print('Testing the opening of the WSDL directory')
wsdl()
此代码的问题是我的脚本试图从与axlsqltoolkit
相同的目录中打开test_axl_connection.py
。我需要它从与导入的模块相同的目录中打开它。我该如何实现?
此外,将补充文件(例如WSDL)放入python包是否明智?
答案 0 :(得分:1)
请勿使用os.getcwd()
通过查看__file__
和test_axl_connection.py
import os
MYPATH = os.path.realpath(os.path.dirname(__file__))
def wsdl():
os.startfile(os.path.join(MYPATH, 'axlsqltoolkit'))
__file__
是一个魔术变量,它包含包含模块源的文件的路径。
os.path.dirname(__file__)
为您提供该文件的目录名称。因为这可能是相对路径,并且您永远都不知道有人会更改当前工作目录,所以最好(在导入过程中)立即将其转换为绝对路径。
但是我通常会为非python文件创建一个单独的目录,因此您可能会执行以下操作:
import os
MYPATH = os.path.join(
os.path.realpath(os.path.dirname(__file__)), "data")
def wsdl():
os.startfile(os.path.join(MYPATH, 'axlsqltoolkit'))
将wsdl文件放在目录中名为data的目录中,该目录包含test_axl_connection.py