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

使用不同的参数调用相同的python脚本并解析参数,python,parsing,arguments,Python,Parsing,Arguments,我需要根据参数从另一个脚本调用不同的python脚本 通过pasiing参数从另一个脚本调用主scipt 例: 根据参数s,我必须调用script1.py或script2.py 如何根据参数-s解析subrun.py中的其他参数。参数的数量根据脚本1或脚本2的不同而有所不同 以詹姆斯的代码为基础,该代码实际上缺少了一部分,即剩余的参数。我认为如果没有这一点,它很可能会因为未知的论点而失败 import argparse parser = argparse.ArgumentParser(desc

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

通过pasiing参数从另一个脚本调用主scipt

例:

根据参数s,我必须调用script1.py或script2.py

如何根据参数-s解析subrun.py中的其他参数。参数的数量根据脚本1或脚本2的不同而有所不同


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

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
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)

我只是使用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()

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

我喜欢参数解析的函数式。创建一个将argv作为参数并递归解析参数的main方法

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
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)

我得到一个错误:无法识别的参数:-d。如果我添加另一个参数-d而不是-s@Jahaja