【问题标题】:How to pass parameters on command line without using flags in python如何在命令行上传递参数而不在python中使用标志
【发布时间】:2023-04-03 13:03:02
【问题描述】:

所以我有我的 main.py 脚本,它基本上将根据命令行上传递的内容运行某些条件语句。例如,如果我使用main.py -t,这将运行测试模式。如果我运行main.py -j /testdata -c 2222-22-22 -p 2222-22-22,这将运行默认模式等等。

我怎样才能停止在命令行上传递标志并能够运行我的代码,而不是使用标志 -j , -c 和 -p ,我可以正常传递值。

到目前为止,我的代码如下:

def main():

    parser = argparse.ArgumentParser()
    parser.add_argument("-c", "--execute-cur-date", action="store", required=False)
    parser.add_argument("-p", "--execute-pre-date", action="store", required=False)
    parser.add_argument("-j", "--execute-json-path", action="store", required=False)
    parser.add_argument("-t", "--execute-test", action="store_true", required=False)
    args = parser.parse_args()

    if args.execute_test:

        testing()

    elif args.execute_json_path and args.execute_cur_date and args.execute_pre_date:

【问题讨论】:

  • argparse 接受 positional 参数,这些参数完全取决于位置(顺序)而不是标志。但是对于那些你必须按照解析器定义的顺序提供所有值。或者您可以自己解析sys.argv 列表。
  • @hpaulj 它如何知道 sys.argv 意味着哪些条件语句?
  • sys.argv 中,您只得到一个字符串列表,而您自己的代码必须决定其中的含义。如果这让您感到困惑,请坚持使用已标记的版本,
  • 您得到的答案毫无帮助,因为您的问题没有任何意义。您是什么意思“正常传递值”?用户@arudzinska 似乎提供了最有说服力的答案。如果出现这些标志时您没有执行任何操作,为什么还要解析命令行中的参数而不是 -t

标签:
python
python-2.7
command-line
arguments
argparse