【问题标题】:using argparse to run a python3 script使用 argparse 运行 python3 脚本
【发布时间】:2020-01-05 09:16:15
【问题描述】:

我在 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)

但是the problem is from this part。我正在尝试使用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

【问题讨论】:

    标签: python-3.x command-line argparse


    【解决方案1】:

    您的main() 函数返回None(由于return 语句为空)。假设您的 files 函数工作正常并且 file_list 得到一些值,那么在该行之后它不再使用。可能您想在主函数file_list 内打印或将其返回以在主函数外部可访问(将其分配给其他变量)。

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

    【讨论】:

    • 我已经编辑了这个问题。但是当我在命令行中像这样运行它时仍然一无所获:python3 QC.py '/home/final/QC/final_test' outlist
    • 您需要执行print(main())result = main(),然后打印result。顺便说一句-我不知道--outlist选项的目的是什么...
    【解决方案2】:

    你应该打印你的结果(?)

    result = main()
    print(result)
    

    print(main())
    

    【讨论】:

      【解决方案3】:

      试试这个:

      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 __name 缩进;我从main 打印返回值;我正确设置了path. And for debugging purposes Iprint(args)`。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-25
        • 1970-01-01
        • 2019-09-13
        • 2017-05-24
        • 2017-05-22
        相关资源
        最近更新 更多