使用不同的参数调用相同的python脚本并解析参数

时间:2014-07-21 00:29:12

标签: python parsing arguments

我需要根据参数从另一个脚本调用不同的python scipts。

主要的scipt是​​通过pasiing parameters

从另一个脚本调用的

EX:

----runner.py invokes----

python testfolder/subrun.py -s script1 -d xyz  -l abc -a test1

python testfolder/subrun.py -s script2 -d xyz  -l abc -a test2 -e test@test.com -u myid

取决于参数s我必须调用script1.pyscript2.py

如何根据参数subrun.py解析-s中的其他参数。参数的数量取决于script1或script2

4 个答案:

答案 0 :(得分:0)

查看https://docs.python.org/2/library/argparse.html

import argparse

parser = argparse.ArgumentParser(description='script parser')
parser.add_argument('-s', "--script_name", help='specify script')

args = parser.parse_args()

if(args.script_name == "script1"):
    #load script 1
else
    #load script 2

答案 1 :(得分:0)

基于詹姆斯的代码,实际上缺少一部分,即其余的参数。我认为如果没有这个,它很可能会因为未知的论点而失败。

import argparse

parser = argparse.ArgumentParser(description='script parser')
parser.add_argument('-s', "--script_name", help='specify script')
parser.add_argument('script_args', nargs=argparse.REMAINDER)

parsed_args = parser.parse_args()
# parsed_args.script_args now contains a list of the rest of the args
# that you can pass on to whatever script that was chosen.

if(parsed_args.script_name == "script1"):
    #load script 1
else
    #load script 2

答案 2 :(得分:0)

我喜欢参数解析的功能样式。创建一个main方法,它将argv作为参数并递归地解析参数。

import sys
if __name__=="__main__":
     main(sys.argv)

def main(argv):
   if len(argv)==0:
       start program
   elif argv[0]=="-s":
       handle script name from argv[1]
       main(argv[2:])
   elif argv[0]=="-d":
       handle d arg from argv[1]
       main(argv[2:])
   else:
       sys.stderr.write("unrecognized command line option: " + argv[0] + "\n")
       exit(1)

答案 3 :(得分:-2)

我只是使用sys.argv,这是一个例子:

import sys

for argument in sys.argv:
    if argument == "--debug" or argument == "-d":
        #do debug stuff
    elif argument == "--help" or argument == "-h":
        #do help stuff
    elif argument == "--log" or argument == "-l":
        #do log stuff

因此,如果您将其作为“test.py -d -h”运行,它会启动并运行调试和帮助,但忽略日志内容。从中您可以根据需要轻松扩展和修改内容。这是我在大型程序开始时经常使用的一个更大的片段。

import sys

for argument in sys.argv:
    if argument == "--debug" or argument == "-d":
        debug = True
    elif argument == "--help" or argument == "-h":
        display_help()
    elif argument == "--log" or argument == "-l":
        logready = True
    elif argument == "1":
        if logready == True: 
            logready = False
            loglevel = 1
        else:
            print("Unknown argument: %s" % argument)
            usage()
    elif argument == "2":
        if logready == True:  
            logready = False
            loglevel = 2
        else:
            print("Unknown argument: %s" % argument)
            usage()
    elif argument == "3":
        if logready == True:  
            logready = False
            loglevel = 3
        else:
            print("Unknown argument: %s" % argument)
            usage()
    elif argument == "4":
        if logready == True:  
            logready = False
            loglevel = 4
    else:
        print("Unknown argument: %s" % argument)
        display_help()

正如您所看到的,它允许人们在启动时指定他们是否需要调试模式,要使用的日志记录级别或显示帮助。如果有人输入未识别的参数,则默认显示帮助。