[英]How to call input parameters into another python file using argparse?
我在 python 管道中有以下文件
#in_para.py
nx = 31
c = 1
#solver.py
import numpy
import os
def simple(output):
ny = nx + 5
c_2 = c + 2
with open(os.path.join(output, 'Output.txt'), 'w') as f:
print("Hello stackoverflow!", file=f)
print("I have a question.", file=f)
if __name__=='__main__':
simple()
#main.py
import os
import numpy
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-C','--Chk',type=str, help='Choose arg')
parser.add_argument('-O','--output',type=str, default="./Output", help=' Provide the output Directory')
args = vars(parser.parse_args())
output = args['output']
if not os.path.exists(output):
os.makedirs(output)
if args['Chk'] == 'compo1':
simple(output)
if __name__=='__main__':
main()
我想通过命令行参数调用输入文件in_para.py
使得
python3 main.py -I in_para -C compo1 -O Ouput_dir
给了我想要的输出:
this is a simple test 36
this is a simple test2 3
我知道如果我这样做from in_para import *
它将解决问题(以不同的方式),但我想从命令行调用输入参数作为位置参数并将其传递给solver.py
。 我无法在与上述任务类似的文档中找到示例。 此外,上面只是一个例子, in_para.py
和solver.py
有几个输入参数和几行代码,所以我不希望main.py
的用户进入任何一个文件并修改它。
更改solver.py
中的实现
def simple(nx, c, output): # provide parameters as function arguments
ny = nx + 5
c_2 = c + 2
print("this is a simple test", ny)
print("this is a simple test2", c_2)
with open(os.path.join(output, 'Output.txt'), 'w') as f:
print("Hello stackoverflow!", file=f)
print("I have a question.", file=f)
在主解析参数文件
... # other imports
import json
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-C','--Chk', type=str, help='Choose arg')
parser.add_argument('-I','--input', type=argparse.FileType("r"), help='Input parameters')
parser.add_argument('-O','--output', type=str, help='output dir')
args = parser.parse_args()
output = args.output
# implement any way of parsing the input file, e.g. a json file
params = json.load(args.input)
... # do something else with the arguments
if args.Chk == 'compo1':
simple(output=output, **params)
... # further code lines
您的输入文件看起来像
{"nx": 31, "c": 1}
评论编辑:
要么使用args = vars(parser.parse_args())
生成字典,要么只使用args = parser.parse_args()
按属性选择参数。 在您的原始帖子中,您使用了我在第一个答案中采用的第一种方法。 但是,我宁愿不使用vars
。 请注意,创建目录的代码片段不会为帖子的实际问题增加价值,因此我将其删除以避免分心,而是添加了一些占位符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.