繁体   English   中英

如何使用 argparse 将输入参数调用到另一个 python 文件中?

[英]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.pysolver.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM