В сценарии, который я пишу, я использую argparse для основных аргументов (для -help, --todo и т. Д.). но пытается использовать sys.argv для получения имени файла, указанного в качестве третьего аргумента для -add. Я использовал это:Попытка использования argparse и sys.argv без sys.argv, которые необходимо использовать в каждой среде выполнения
def parseargs():
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument("--help", help="Print argument usage", action="store_true")
parser.add_argument("--memo", help="Read memo file", action="store_true")
parser.add_argument("--todo", help="Read TODO file", action="store_true")
parser.add_argument("--trackedfiles", help="Read tracked files list", action="store_true")
parser.add_argument("--add", help="Add a file to trackedfiles", action="store_true")
parser.add_argument("--edit", help="Edit file in .wpm_data with editor", action="store_true")
parser.add_argument("--newdir", help="Create a new directory to initialize user-data", action="store_true")
parser.add_argument("file")
p_args = parser.parse_args()
if p_args.help:
printargs()
sys.exit()
if p_args.memo:
print_memo()
sys.exit()
if p_args.todo:
print_todo()
sys.exit()
if p_args.trackedfiles:
print_trackedfiles()
sys.exit()
if p_args.add: # this is were I'm stumpped
if p_args.file == sys.argv[2]:
givenfile = p_args.file
else:
pass
print("[!]\t", givenfile, "to be added to trackedfiles")
sys.exit()
Который работает так:
./main.py --add textfile.txt
[!] textfile.txt to be added to trackedfiles
Но когда другой аргумент будет использоваться как --help
, необходимо использовать для givenfile третий аргумент
./main.py --help
usage: main.py [--help] [--memo] [--todo] [--trackedfiles] [--add] [--edit]
[--newdir]
file
main.py: error: the following arguments are required: file
Как я могу отделить использование argparse и sys.argv, когда sys.argv не нужно постоянно использовать, чтобы его можно было вызывать только тогда, когда запускается функция, которая ему нужна?
Ваш оператор 'if' возвращает true на' p_args.add', потому что вы делаете 'store_true', даже если вы не используете' --add' при запуске программы – letsc