【问题标题】:path to a directory as argparse argument作为 argparse 参数的目录路径
【发布时间】:2016-12-14 12:48:56
【问题描述】:

我想在add_argument()ArgumentParser() 中接受目录路径作为用户输入。

到目前为止,我已经写了这个:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('path', option = os.chdir(input("paste here path to biog.txt file:")), help= 'paste path to biog.txt file')

这个问题的理想解决方案是什么?

【问题讨论】:

标签: python argparse


【解决方案1】:

可以确保路径是一个有效的目录,例如:

import argparse, os

def dir_path(string):
    if os.path.isdir(string):
        return string
    else:
        raise NotADirectoryError(string)

parser = argparse.ArgumentParser()
parser.add_argument('--path', type=dir_path)

# ...

可以使用os.path.isfile() 来检查文件,或者使用os.path.exists() 来检查两者中的任何一个。

【讨论】:

    【解决方案2】:

    Argument Parser(argparse) 示例:添加了自定义处理程序的不同类型的参数。对于 PATH,您可以传递 "-path" 后跟路径值作为参数

    import os
    import argparse
    from datetime import datetime
    
    
    def parse_arguments():
        parser = argparse.ArgumentParser(description='Process command line arguments.')
        parser.add_argument('-path', type=dir_path)
        parser.add_argument('-e', '--yearly', nargs = '*', help='yearly date', type=date_year)
        parser.add_argument('-a', '--monthly', nargs = '*',help='monthly date', type=date_month)
    
        return parser.parse_args()
    
    
    def dir_path(path):
        if os.path.isdir(path):
            return path
        else:
            raise argparse.ArgumentTypeError(f"readable_dir:{path} is not a valid path")
    
    
    def date_year(date):
        if not date:
            return
    
        try:
            return datetime.strptime(date, '%Y')
        except ValueError:
            raise argparse.ArgumentTypeError(f"Given Date({date}) not valid")
    
    
    def date_month(date):
        if not date:
            return
    
        try:
            return datetime.strptime(date, '%Y/%m')
        except ValueError:
            raise argparse.ArgumentTypeError(f"Given Date({date}) not valid")
    
    
    def main():
        parsed_args = parse_arguments()
    
    if __name__ == "__main__":
    main()
    

    【讨论】:

      【解决方案3】:

      你可以使用类似的东西:

      import argparse, os
      
      parser = argparse.ArgumentParser()
      parser.add_argument('--path', help= 'paste path to biog.txt file')
      args = parser.parse_args()
      
      
      os.chdir(args.path) # to change directory to argument passed for '--path'
      
      print os.getcwd()
      

      在运行脚本时将目录路径作为参数传递给--path。另外,检查官方文档argparse的正确用法:https://docs.python.org/2/howto/argparse.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-10
        • 2013-12-07
        • 1970-01-01
        • 2015-11-25
        • 2020-12-13
        • 1970-01-01
        • 2011-04-20
        • 1970-01-01
        相关资源
        最近更新 更多