【问题标题】:How do I accept user input on command line for python script instead of prompt如何在 python 脚本的命令行上接受用户输入而不是提示
【发布时间】:2013-08-09 21:37:32
【问题描述】:

我有询问用户输入的 python 代码。 (例如 src = input('Enter Path to src:')。所以当我通过命令提示符运行代码时(例如 python test.py)提示出现'Enter path to src:'。但我想在一行中输入所有内容(例如 python test.py c:\users\desktop\test.py)。我应该做些什么改变?提前谢谢

【问题讨论】:

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


    【解决方案1】:

    argparseoptparse 是你的朋友。 optparse 示例:

    from optparse import OptionParser
    parser = OptionParser()
    parser.add_option("-f", "--file", dest="filename",
                  help="write report to FILE", metavar="FILE")
    parser.add_option("-q", "--quiet",
                  action="store_false", dest="verbose", default=True,
                  help="don't print status messages to stdout")
    
    (options, args) = parser.parse_args()
    

    对于 argparse:

    import argparse
    
    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
    parser.add_argument('--sum', dest='accumulate', action='store_const',
                   const=sum, default=max,
                   help='sum the integers (default: find the max)')
    
    args = parser.parse_args()
    

    【讨论】:

    • 所以我有 src = sys.argv[1] 和 dst = sys.argv[2] 如何将其放入 argparse 或 optparse?
    • @user2661518 你把它们作为选项。
    【解决方案2】:

    src = input('Enter Path to src: ') 替换为:

    import sys
    src = sys.argv[1]
    

    参考:http://docs.python.org/2/library/sys.html

    如果您的需求比您承认的要复杂,您可以使用 optparse(自 2.7 起已弃用)、argparse(2.7 和 3.2 中的新功能)或 getopt 之类的参数解析库。

    参考:Command Line Arguments In Python


    下面是一个使用 argparse 和所需源参数和目标参数的示例:

    #! /usr/bin/python
    import argparse
    import shutil
    
    parser = argparse.ArgumentParser(description="Copy a file")
    parser.add_argument('src', metavar="SOURCE", help="Source filename")
    parser.add_argument('dst', metavar="DESTINATION", help="Destination filename")
    args = parser.parse_args()
    
    shutil.copyfile(args.src, args.dst)
    

    使用-h 运行此程序以查看帮助消息。

    【讨论】:

    • +1 表示完整性,提到了我不知道的 getopt。
    • @Rob 所以我有 src = sys.argv[1] 和 dst = sys.argv[2] 我怎样才能把它放在 argparse 或 optparse 中?
    【解决方案3】:

    您可以使用sys.argv[1] 来获取第一个命令行参数。如果您需要更多参数,可以使用sys.argv[2] 等来引用它们。

    【讨论】:

      猜你喜欢
      • 2013-10-10
      • 2016-06-15
      • 2011-03-24
      • 2022-12-07
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多