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