您好,我的功能看起来只适用于2.x(2.7)系统。但我的程序的其余部分是用python 3.4编写的。
文件 a.py (版本2.7)是我可以通过调用脚本在2.7中运行的脚本:
import psspy
openPath='busSystem.raw'
saveToPath='busSystem_out.raw'
#Open a case file
psspy.read(0,openPath)
do some calculation...
#Save to another case file
psspy.rawd_2(0,1,[1,1,1,0,0,0,0],0,saveToPath)
然后在 b.py 工作中从python 3.4调用以下代码
import os
os.system('c:\python27\python a.py')
但后来我想将 a.py 中的脚本更改为kwargs的函数,例如:
def run(openPath='busSystem.raw',saveToPath='busSystem_out.raw')
#Open a case file
psspy.read(0,openPath)
do some calculation...
#Save to another case file
psspy.rawd_2(0,1,[1,1,1,0,0,0,0],0,saveToPath)
do something more...
所以我想做一些像
这样的事情import os
in = 'busSystem.raw'
out = 'busSystem_out.raw'
os.system('c:\python27\python a.py run(in, out)')
# Or
os.system('c:\python27\python a.py run(openPath=in,saveToPath=out)')
所以问题是:
我知道如果我可以用python 3.4运行脚本我可以将函数导入为
from a import run
run(in,out)
我的解决方案是将整个python脚本作为字符串读取,使用str.replace(' busSystem.raw',in)和str.replace('' busSystem_out.raw',out)并将其保存为 a_new.py 并如前所述运行它。
a.py 中的脚本需要在python版本2.7中,因为它与Siemens PSS / E 33交互,后者只通过py2.7进行通信。
答案 0 :(得分:1)
函数调用仅在单个进程中起作用,通常只在单一语言中起作用。所以你有一个可以不带参数运行的脚本。现在您希望此脚本处理命令行参数。这与函数调用和关键字参数没有任何关系。
您应该阅读Python文档中的Argparse Tutorial。它引入了命令行参数的概念,因为您似乎不熟悉它,然后展示了使用内置argparse
模块来解析参数的难点部分的一些示例。
然后你应该阅读subprocess
模块。它比os.system()
更适合你。
或者,您可以更新脚本,以便在Python 3中正常工作。这就是我要开始的。
这是一些未经测试的示例代码。
在现有脚本a.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('openPath')
parser.add_argument('saveToPath')
args = parser.parse_args()
openPath=args.openPath
saveToPath=args.saveToPath
# ... the rest of the existing script
在你的其他节目中:
import subprocess
in_ = 'busSystem.raw'
out = 'busSystem_out.raw'
subprocess.call([r'c:\python27\python', in, out])