Как сделать sys.аргументы argv необязательны? (Питон)
sys.argv
принимает аргументы в командной строке оболочки при запуске программы. Как сделать эти аргументы необязательными?
Я знаю, что могу использовать try
- except
. Но это заставляет вас вставлять либо никаких дополнительных аргументов, либо все дополнительные аргументы, если вы не вложите больше try
- except
что делает код менее читаемым.
редактировать
предположим, мне понадобится следующая функциональность, как мне реализовать это?
$ python program.py add Peter
'Peter' was added to the list of names.
этой
5 ответов
plac - это альтернатива стандартной библиотеки модулей даны ответы. Это позволяет определить аргументы командной строки через аннотации. Из документации exemple 8 демонстрирует необязательный синтаксис аргументов:
example8.py
def main(command: ("SQL query", 'option', 'q'), dsn):
if command:
print('executing %s on %s' % (command, dsn))
# ...
if __name__ == '__main__':
import plac; plac.call(main)
Argparse exemple:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--add", help="Add prefix to string")
args = parser.parse_args()
обратите внимание, что Соглашение для необязательного аргумента должно быть предоставлено как "--add " while команды предлагаются как "добавить". Есть реализация подкоманды в argparse.
редактировать чтобы обратиться к вашему редактированию,
import sys
sys.argv = sys.argv[1:]
names = []
while sys.argv and sys.argv[0] == 'add':
#while the list is not empty and there is a name to add
names.append(sys.argv[1])
print sys.argv[1], 'was added to the list of names.'
sys.argv = sys.argv[2:]
все следующие работы с этим
$ python program.py add Peter
Peter was added to the list of names.
$ python program.py add Peter add Jane
Peter was added to the list of names.
Jane was added to the list of names.
$ python program.py
если преимущество требования "добавить" перед каждым именем заключается в том, что если есть какие-либо другие аргументы, которые вы хотите искать после добавления имен, вы можете.
Если вы хотите передать несколько имен, сказав python program.py add Peter Jane
Это можно сделать с довольно простым изменением
import sys
names = []
if len(sys.argv) > 2 and sys.argv[1] == 'add':
names = sys.argv[2:]
for n in names:
print n, 'was added to the list of names.'
оригинал
кажется, что вы бы лучше с чем-то вроде optparse. Однако с sys.argv
это список, который вы можете проверить его длину.
arg1 = sys.argv[1] if len(sys.argv) > 1 else 0 # replace 0 with whatever default you want
arg2 = sys.argv[2] if len(sys.argv) > 2 else 0
а затем используйте arg1 и arg2 в качестве" необязательных " аргументов командной строки. это позволит вам пройти 1, 2 или 0 аргументов командной строки (на самом деле вы можете пройти больше чем 2 и они будут проигнорированы). это также предполагает, что аргументы имеют известный порядок, если вы хотите использовать флаги, такие как -a
затем следует значение, посмотрите в optparse http://docs.python.org/library/optparse.html?highlight=optparse#optparse
вы должны использовать парсер командной строки, такой как getopt или argparse. Они позволяют определить необязательные параметры со значениями по умолчанию.
вы можете найти ответ, используя argparse
здесь здесь. Решения с использованием getopt
или opster
будет проголосован как самый любимый ответ вместо этого.