Python 3.x 使用argparse运行python3脚本

Python 3.x 使用argparse运行python3脚本,python-3.x,command-line,argparse,Python 3.x,Command Line,Argparse,我在python3中创建了一个函数,它获取一些txt文件的路径,并返回一个包含所有txt文件名称的列表。 以下是函数: import os def files(path): folder = os.fsencode(path) filenames = [] for file in os.listdir(folder): filename = os.fsdecode(file) if filename.endswith( ('.txt') )

我在python3中创建了一个函数,它获取一些txt文件的路径,并返回一个包含所有txt文件名称的列表。 以下是函数:

import os
def files(path):
    folder = os.fsencode(path)
    filenames = []
    for file in os.listdir(folder):
        filename = os.fsdecode(file)
        if filename.endswith( ('.txt') ):
            filenames.append(filename)
            filenames.sort()
    return filenames
要运行此功能,我可以执行以下操作,这些操作非常有效:

if __name__ == "__main__":
    path = '/home/final_test'
    file_list = files(path)
    print(file_list)
但是问题出在这部分。我正在尝试使用
argparse
创建一个脚本,以便在命令行中运行它。为此,我在脚本末尾添加了以下代码,但它不返回任何内容。你知道怎么修吗

def main():
    ap = argparse.ArgumentParser(description="")
    ap.add_argument('-P', '--path', required=True)
    ap.add_argument('-o', '--outlist', required=True)
    args = ap.parse_args()

    file_list = files(path)

    return file_list

    if __name__ == "__main__":
        from signal import signal, SIGPIPE, SIG_DFL
        signal(SIGPIPE, SIG_DFL)

        try:
            main()
        except IOError as e:
            if e.errno != 32:
                raise
        except KeyboardInterrupt as e:
            pass
您的
main()
函数返回
None
(由于
return
语句为空)。假设您的
files
函数正常工作,并且文件列表得到一些值,则该行之后不再使用。您可能希望在主函数
文件\u列表中打印,或将其返回以便在主函数外部访问(将其分配给其他变量)


也就是说,我不明白你为什么需要
信号
行。

你应该打印结果(?)

试试这个:

def main():
    ap = argparse.ArgumentParser(description="")
    ap.add_argument('-P', '--path', required=True)
    #ap.add_argument('-o', '--outlist', required=True)
    args = ap.parse_args()
    print(args)    
    file_list = files(args.path)

    return file_list

if __name__ == "__main__":
    filelist = main()
    print(filelist)

我纠正了
if\u name
缩进;我从
main
打印返回值;我正确地设置了
路径
。出于调试的目的,我
print(args)`。

我编辑了这个问题。但是当我在命令行中这样运行它时,仍然没有得到任何结果:python3 QC.py'/home/final/QC/final_test'大纲您需要执行
print(main())
result=main()
然后打印
result
。顺便说一下-我不知道
--outlist
选项的目的是什么。。。
print(main())
def main():
    ap = argparse.ArgumentParser(description="")
    ap.add_argument('-P', '--path', required=True)
    #ap.add_argument('-o', '--outlist', required=True)
    args = ap.parse_args()
    print(args)    
    file_list = files(args.path)

    return file_list

if __name__ == "__main__":
    filelist = main()
    print(filelist)