首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么python中导入的PowerFactory模块只能执行一次?

为什么python中导入的PowerFactory模块只能执行一次?
EN

Stack Overflow用户
提问于 2017-05-18 18:53:27
回答 2查看 3.4K关注 0票数 0

脚本能够通过Python在外部运行一个名为PoiwerFctory的软件,如下所示:

代码语言:javascript
运行
复制
#add powerfactory.pyd path to python path
import sys
sys.path.append("C:\\Program Files\\DIgSILENT\\PowerFactory 2017 
SP2\\Python\\3.6")

#import powerfactory module
import powerfactory

#start powerfactory module in unattended mode (engine mode)
app=powerfactory.GetApplication()

#get the user
user=app.GetCurrentUser()

#active project
project=app.ActivateProject('Python Test') #active project "Python Test"
prj=app.GetActiveProject   #returns the actived project

#run python code below
ldf=app.GetFromStudyCase('ComLdf') #caling loadflow command object
ldf.Execute() #executing the load flow command

#get the list of lines contained in the project
Lines=app.GetCalcRelevantObjects('*.ElmLne') #returns all relevant objects, 
                                               i.e. all lines
for line in Lines: #get each element out of list
    name=line.loc_name #get name of the line
    value=line.GetAttribute('c:loading') # return the value of elements

#Print the results                     
print('Loading of the line: %s = %.2f'%(name,value))

当上面的代码第一次在Spyder中执行时,它将显示正确的resutls。但是,如果再次重新执行脚本,则会出现以下错误:

代码语言:javascript
运行
复制
Reloaded modules: powerfactory
Traceback (most recent call last):

  File "<ipython-input-9-ae989570f05f>", line 1, in <module>
runfile('C:/Users/zd1n14/Desktop/Python Test/Call Digsilent in 
Python.py', wdir='C:/Users/zd1n14/Desktop/Python Test')

  File "C:\ProgramData\Anaconda3\lib\site-
packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\lib\site-
packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/zd1n14/Desktop/Python Test/Call Digsilent in Python.py", 
line 12, in <module>
user=app.GetCurrentUser()

RuntimeError: 'powerfactory.Application' already deleted 

提到How can I exit powerfactory using Python in Unattended mode?,这可能是因为PowerFactory在仍在运行。到目前为止,唯一找到的方法是重新启动Spyder并再次执行脚本,这是非常低的效率,如果我想重写代码并调试它。

如果有人能给我一些关于这个问题的建议的话,那就太过分了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-22 10:42:17

我也遇到了同样的问题。Python仍然连接到powerfactory,如果您再次尝试连接,则会给出错误。对我来说最基本的方法是在你的剪裁结束时杀死这个实例

代码语言:javascript
运行
复制
del app

调试期间的另一个想法可能是:

代码语言:javascript
运行
复制
try:
    # Do something in your skript
finally:
    del app

所以在任何情况下都会杀死这个例子。

票数 0
EN

Stack Overflow用户

发布于 2017-05-22 11:29:32

解决这一问题的方法是通过添加以下内容重新加载powerfacotry模块:

代码语言:javascript
运行
复制
if __name__ == "__main__":

在进口之前。

背后所提到的原因是:": do?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44055764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档