首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python /E作为变量输出

Python /E作为变量输出
EN

Stack Overflow用户
提问于 2014-09-02 10:24:10
回答 2查看 3.5K关注 0票数 1

我是电力工程师,我经常在PSS/E程序中使用python。我是堆叠,我需要你的帮助,作为程序员。我有个小密码:

代码语言:javascript
复制
import os,sys

PSSE_LOCATION = r"C:\Program Files\PTI\PSSE33\PSSBIN"
sys.path.append(PSSE_LOCATION)
os.environ['PATH'] = os.environ['PATH'] + ';' +  PSSE_LOCATION

import psspy
import redirect
redirect.psse2py()

#--------------------------------
# PSS/E Saved case

CASE = r"""D:\xxx\Desktop\TESTING\SUMMAX.sav"""

if __name__ == '__main__':
    psspy.psseinit(2000)
    psspy.case(CASE)
    psspy.fnsl(
        options1=0, # disable tap stepping adjustment.
        options5=0, # disable switched shunt adjustment.
    )
    psspy.fdns([0,0,0,1,1,0,99,0])
    psspy.area_2(0,1,1)

代码redirect.psse2py()在控制台中打印程序报告。你能帮我把这些输出作为变量吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-02 10:35:17

鉴于我对PSSE不太了解,您可以尝试以下方法:

代码语言:javascript
复制
import sys
import io

out, err = io.StringIO(), io.StringIO()
sys.stdout = out
sys.stderr = err

# rest of your code here

# once your code is finished

results = out.getvalue()
errors = err.getvalue()
票数 1
EN

Stack Overflow用户

发布于 2015-02-12 19:54:43

到目前为止,我最喜欢的解决方案是基于@J.FSebastianResponse Redirect stdout to a file in Python?的。

最初使用psspy.report_output()和相关函数似乎是最好的选择,但它们有点痛苦,因为您只能写入文件,而不能写入StringIO缓冲区。

下面是一个完整的例子:

代码语言:javascript
复制
import contextlib
import sys

# Auto-magically setup PSSE environment.  
# You can do this step the hard way if you want
import pssepath
pssepath.add_pssepath()

import psspy
import redirect
redirect.psse2py()
psspy.psseinit(50000)

@contextlib.contextmanager
def redirect_stdout(new_target):
    old_target, sys.stdout = sys.stdout, new_target # replace sys.stdout
    try:
        yield new_target # run some code with the replaced stdout
    finally:
        sys.stdout = old_target # restore to the previous value


import StringIO
f = StringIO.StringIO()
print "before redirect"
with redirect_stdout(f):
    psspy.report('123xxx(report)')
    psspy.alert('abcyyy(alert)')
    psspy.progress('foobar(progress)')
    f.seek(0)
    var = f.read()

print "after redirect"
print "var: %s" % var

其中的指纹:

代码语言:javascript
复制
< snip PSSE init copyright header>
before redirect
after redirect
var: 123xxx(report)
abcyyy(alert)
foobar(progress)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25621134

复制
相关文章

相似问题

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