我如何从 argparse 函数调用的函数 return 到 main 的值

How do I return a value to main from a function called by an argparse function

新手 Python 学生在这里 (运行 2.7) 试图表达我对函数和 argparse 的理解......有时在一起。

我有一个调用 argparse 函数的主函数,它有一个调用 path_check 函数的 argparse 命令行参数 (-i/--input),它验证输入参数中传递的路径.现在我不知道如何将经过验证的输入路径 return 返回到我的 main 函数,因为 path_check 函数没有在 main 中调用。还想知道是否有更好的方法来构建它(不确定 class 在这里是否合适)。

#!/bin/user/python

import os,sys
import argparse  

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("-i", "--input",help="source directory",
        required=True,type=path_check)
    args = parser.parse_args()

def path_check(arg):
    if not os.path.exists(arg):
        print("Directory does not exist. Please provide a valid path")
    else:
        return arg

def main():
    '''
    This main script analyzes the source folder and redirects
    files to the appropriate parsing module
    '''
    parse_args()
    source = path_check() # This is the problem area

if __name__ == "__main__": main()

收到的错误是

TypeError: path_check() takes exactly 1 argument (0 given)

编辑: 如果对任何人有帮助,这是更正后的代码。我需要向 argparse 参数添加描述,这样我就有了调用参数值的方法,然后我可以 return.

 #!/bin/user/python

import os,sys
import argparse

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("-i", "--input",help="source directory",
        dest="input",required=True,type=path_check)

    args = parser.parse_args()
    return args.input

def path_check(arg):
    if not os.path.exists(arg):
        print("Directory does not exist. Please provide a valid path")
    else:
        return arg

def main():
    '''
    This main script analyzes the source folder and redirects
    files to the appropriate parsing module
    '''
    source = parse_args()

if __name__ == "__main__": main()

为了澄清上述评论,您需要在此处包含论点

source = path_check(argument)

在main中调用函数时,如果要传递一些变量,需要将它们插入括号中。

function(Variable1, Variable2,)

并且不要忘记将它们放在函数本身上以接受变量。要将 return 变量添加到您的 main 函数,只需在函数末尾执行 return VariableName 并将其添加到 main 中的调用前面,然后是 = 符号。

示例:

main()
   x = 1
   ReturnVariable = function1(x)

function1(x)
   ReturnVariable = x * 2
   return ReturnVariable
def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("-i", "--input",help="source directory",
        required=True,type=path_check)
    args = parser.parse_args()
    return args     # <====

def main():
    '''
    This main script analyzes the source folder and redirects
    files to the appropriate parsing module
    '''
    args = parse_args()      # <===
    source = path_check(args.input) # <===

parse_args函数必须return将args变量main。然后 main 必须将其 input 属性传递给 path_check.

args.input 将是您在命令行中提供的字符串。

args 是一个简单的 argparse.Namespace 对象,其属性对应于您在 parser 中定义的每个参数。其中一些属性的值可能为 None,具体取决于默认值的处理方式。

在调试过程中,最好包含一个

print(args)

语句,这样您就可以看到从解析器返回的内容。