【发布时间】:2021-03-27 10:30:48
【问题描述】:
我正在处理一个命令行项目,在处理 add 子命令时遇到了一些问题,如下面的 cmets 所示:
import argparse
import sys
def todo(args):
if args.o =='add':
print("Added Todo: "+args.x)
f=open("todo.txt", "a+")
c= str(count+1)
p= '\n'+'. '+args.x
f.write(p)
f.close()
elif args.o =='report':
return
elif args.o =='del NUMBER':
return
elif args.o =='done NUMBER':
return
elif args.o =='help':
print ("Usage :-"+
"\n"+'$ ./todo add "todo item" # add a new todo'+
"\n"+'$ ./todo ls # Show remaining todos'+
"\n"+'$ ./todo del NUMBER # delete a todo'+
"\n"+'$ ./todo done NUMBER # complete a todo'+
"\n"+'$ ./todo help # Show Usage'+
"\n"+'$ ./todo report # Statistics')
elif args.o =='ls':
f=open("todo.txt", "r")
print(f.read())
f.close()
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('./todo', type=str, default="./todo")
parser.add_argument('o', type=str, default="add")
args = parser.parse_args()
if args.o =='add': # <- starting here
parser.add_argument('x', type=str, default=None)
args = parser.parse_args()
sys.stdout.write(str(todo(args))) # <- ending here
else:
a = parser.parse_args()
sys.stdout.write(str(todo(args)))
当我在 Powershell 中运行此脚本时,我收到一些错误,例如
PS E:\python projects\fellowship challenge\python> python todo.py ./todo add " I am soham Das Biswas"
usage: todo.py [-h] ./todo o
todo.py: error: unrecognized arguments: I am soham Das Biswas
我该如何解决这个问题?
【问题讨论】:
-
为什么要指定
todo两次?如果文件被称为todo而不是todo.py,则./todo将是命令名称,并且它被放置在当前目录中并标记为可执行文件;python todo.py是使用python解释器显式运行文件todo.py中的脚本的等效命令。
标签: python command-line argparse