#python #argparse
#python #argparse
Вопрос:
Я хочу установить текстовый файл rand.letter.txt
в качестве файла word по умолчанию в этом сегменте argparse, который будет использоваться и считываться в программе. Я бы предположил, что это должно быть расположено в строке 4-5 ниже. Как мне это сделать?
Как вы увидите, я уже сделал это с размером матрицы. Но я испытываю трудности, когда речь идет о файле с характеристиками str.
def main():
print("WELCOME TO THE MEMORY PUZZLE!")
parser = argparse.ArgumentParser(description="Memory game")
parser.add_argument("words_file", metavar="FILE", nargs=1,
help="Words file")
parser.add_argument(
"--matrix-size",
metavar="SIZE",
dest="matrix_size",
help="Matrix size",
default=6,
type=int,
)
args = parser.parse_args()
game = Game(args.words_file[0], args.matrix_size)
game.play()
Большое вам спасибо за любую помощь или ввод!
Комментарии:
1. Вы пробовали добавлять
default="rand.letter.txt"
?2. Да, к сожалению, он не работает, возвращает, что в нем отсутствует файл, если я не включаю его при запуске программы (чего я не собираюсь делать), «ошибка: требуются следующие аргументы: FILE»
Ответ №1:
Если вам нужен позиционный аргумент по умолчанию, вам нужно указать nargs
as ?
. При этом будет использоваться один аргумент из командной строки, если он доступен, в противном случае будет использоваться значение по умолчанию.
parser.add_argument(
"words_file", nargs="?", default="rand.letter.txt", help="Words file"
)
Кроме того, когда вы инициализируете свой game
, вы отсекаете первый символ от words_file
переменной. Вам нужно изменить его на:
game = Game(args.words_file, args.matrix_size)
Обратите [0]
внимание, что он исчез.
Комментарии:
1. Спасибо, проблема в том, что я получаю это сообщение: » FileNotFoundError: [Ошибка 2] Нет такого файла или каталога: ‘r’ «, когда я не ввожу никаких аргументов (поскольку мне просто нужны значения по умолчанию): (venv) n147-p63:Project rebeckae $ python3 game.py
Ответ №2:
Если вы хотите установить значения по умолчанию для positional, вы должны указать nargs="?"
Source . nargs=1
в любом случае, в вашем примере это кажется излишним, поскольку он создает список только из одного элемента. Итак, ваша строка должна выглядеть так:
parser.add_argument("words_file", metavar="FILE", nargs="?",
default="rand.letter.txt", help="Words file")