这是我在这里的第一个问题,如果有任何错误,我很抱歉
我正在用python用CMD和一些Youtube特性制作一个shell,我已经差不多完成了,函数可以正常工作,但是由于某种原因,shell在我尝试[command]-h之后退出了(我使用argparse)
下面是一个发生了什么的例子:
As you can see, arguments help gets printed but then it quits the shell
如果我输入正确的参数,shell将按需要保持打开状态
下面是getSongUrl函数的代码:
def do_getSongUrl(self, arg):
"""given a name, returns a list with all the videos and their URLs"""
args = parser_getSongUrl.parse_args(arg.split())
song = args.song
song_str = ' '.join(word for word in song)
print("Searching: " + song_str)
print("Limiting results to: " + str(args.limit))
res = musictools.get_song_urls(song_str)
for i in range(args.limit):
for (song_urls, song_titles) in res:
print(song_titles + ":")
print(song_urls)
print("")
这个函数的解析器是在CMD类之前定义的,我看到的每个例子都是这样的,下面是解析器的代码:
parser = argparse.ArgumentParser(description='Shell parsers handler')
subparsers = parser.add_subparsers()
parser_getSongUrl = subparsers.add_parser("getSongUrl")
parser_getSongUrl.add_argument("-s", "--song", help="Name of the song", type=str, required="true", nargs="+")
parser_getSongUrl.add_argument("-l", "--limit", help="Limits the output", type=int, default=10)
事先谢谢你的帮助。我对python还是个新手,如果有任何反馈,我将不胜感激
打印帮助后,退出程序是默认操作:
exit()
也是从ArgumentParser.error()
调用的,例如,当看到未识别的参数时调用因此,您可以通过替换解析器的
exit()
来改变这种行为。您不希望重写_HelpAction
的逻辑,因为您确实希望解析器在打印帮助或看到错误后结束其工作并将控制返回到控制台循环(而不是命令执行代码)。例如,提出一些具体的例外情况或者,您可以在控制台循环中捕获
SystemExit
,并将其视为命令结束它在
-h
线上写了什么使用
subparsers
可以获得多个级别的帮助,一个用于主解析器,另一个用于每个子解析器这是命令行中
-h
、help
的正常行为,无论是使用shell命令(例如ls -h
)还是使用argparse
的脚本将显示帮助而不退出。我经常在测试的时候用这个
相关问题 更多 >
编程相关推荐