如何在命令行中通过参数而不在python中使用标志

时间:2019-01-23 08:57:03

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

所以我有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:

2 个答案:

答案 0 :(得分:0)

使用sys模块来解析命令行参数(sys.argv将是参数列表):

#!/usr/bin/env python3

import sys

# The first argument (sys.argv[0]) is the script name
print('Command line arguments:', str(sys.argv))

运行脚本:

$ python3 script.py these are my arguments
Command line arguments: ['script.py', 'these', 'are', 'my', 'arguments']

您可以在this tutorial中找到更多用法示例。

答案 1 :(得分:0)

您可能想看看python-fire https://github.com/google/python-fire

import fire


def main(c=None, p=None, j=None, t=None):
    print(c, p, j, t)
    if c:
        print("C passed")
    elif p and j and t:
        print("P, J, T passed")


if __name__ == "__main__":
    fire.Fire(main)

您只需传递None即可跳过参数。

python main.py None p_val j_val t_val

python main.py c_val