【问题标题】:How to read input from keyboard instead of file in python如何从键盘而不是python中的文件读取输入
【发布时间】:2020-07-22 08:46:36
【问题描述】:

我有下面的python sn-p

@click.argument('file',type=click.Path(exists=True))

上述命令从以下格式的文件中读取

python3 code.py file.txt

使用函数处理相同的文件

def get_domains(domain_names_file):
    with open(domain_names_file) as f:
        domains = f.readlines()
    return domains
domains = get_domains(file)

我不想从文件中读取它,我想在终端中执行时提供一个域作为参数,命令将是

python3 code.py example.com

我应该如何重写代码。

Python 版本:3.8.2

【问题讨论】:

  • 查看 argparse。
  • 从参数声明中删除type。见docs
  • @rdas 你能回答一下吗

标签: python python-3.x python-click


【解决方案1】:

我意识到您正在使用click 库。 由于您想将“域”/网站作为参数传递,您可以将其作为字符串输入。如果你从装饰器中移除 'type' 参数,默认情况下会变成 STRING 类型。

最基本的选项是一个值的简单字符串参数。如果未提供类型,则使用默认值的类型,如果未提供默认值,则假定类型为 STRING。

解决方案: @click.argument('domain')

【讨论】:

    【解决方案2】:

    click.argument 默认创建从命令行读取的参数:

    @click.argument('file')
    

    这应该创建一个从命令行读取并在file 参数中可用的参数。

    查看文档和示例here

    【讨论】:

    【解决方案3】:

    您可以使用argparse:

    import argparse
    
    # set up the different arguments
    parser = argparse.ArgumentParser(description='Some nasty description here.')
    parser.add_argument("--domain", help="Domain:   www.some-domain.com", required=True)
    
    args = parser.parse_args()
    print(args.domain)
    

    然后你通过调用它

    python your-python-file.py --domain www.google.com
    

    【讨论】:

      猜你喜欢
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      相关资源
      最近更新 更多