[英]Python PSS/E get output as variable
我是電源工程師,我經常在PSS / E程序中使用python。 我堆積如山,我希望得到您作為程序員的幫助。 我有這個小代碼:
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()
在控制台中打印程序報告。 您能幫我把這些輸出作為變量嗎?
鑒於我對PSSE不太了解,可以嘗試以下方法:
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()
到目前為止,我最喜歡的解決方案基於@JF Sebastian答案將stdout重定向到Python中的文件? 。
psspy.report_output()
使用psspy.report_output()
和相關函數似乎是最好的選擇,但是它們有些痛苦,因為您只能寫入文件,而不能寫入StringIO
緩沖區。
這是一個完整的示例:
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
打印:
< snip PSSE init copyright header>
before redirect
after redirect
var: 123xxx(report)
abcyyy(alert)
foobar(progress)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.