У меня есть следующий код Python, который имеет 1 командной строки необязательный параметр (c
), который имеет аргумент и 2 варианта (a
и b
), которые не имеют аргумент:Python параметр командной строки не поднимая ошибку, если аргумент ошибочно используется
import sys, getopt
def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"abc:",["csvfile="])
except getopt.GetoptError:
print 'Error in usage - a does not require an argument'
sys.exit(2)
for opt, arg in opts:
print "Raw input is: {}" .format(opt)
if opt in ("-c", "--csvfile"):
outputfile = arg
print 'Output file is {}' .format(outputfile)
elif opt == '-a':
print 'Alpha'
elif opt == '-b':
print 'Beta'
print 'User choice is {}' .format(opt.lstrip('-'))
if __name__ == "__main__":
main(sys.argv[1:])
Когда я вхожу python readwritestore.py -a
я получаю:
Raw input is: -a
Alpha
User choice is a
Это то, что я надеялся, если аргумент командной строки -a
. Однако, если я вхожу python readwritestore.py -a csvfile_name
, то я получаю:
Raw input is: -a
Alpha
User choice is a
Это не то, что я предназначен. В этой функции c
является единственным вариантом, который запрашивает аргумент. Если я вхожу a
с аргументом, код должен дать сообщение об ошибке, что я настроить
Error in usage - a does not require an argument
Это не происходит для a
или b
. Это позволяет вводить аргумент без повышения ошибки.
Если параметры, которые не требуют аргумента, вводятся с аргументом, то я хотел бы, чтобы он вызывал ошибку. python readwritestore.py -a text
и python readwritestore.py -b text
следует поднять с ошибкой Error in usage - a does not require an argument
.
Есть ли способ указать это? Правильно ли это делается getopt()
?
Дополнительная информация:
Я только хочу python readwritestore.py -c text
работать с аргументом. Для остальных 2 опций, a
и b
, код должен поднять ошибку.
Возможно, вы захотите рассмотреть ['argparse'] (https://docs.python.org/3/library/argparse.html), более интуитивно понятный модуль Python для этого. –
У меня есть много вопросов по управлению аргументом для скрипта без lib. Но с [Argparse] (https://docs.python.org/2/howto/argparse.html) это очень просто. Я могу опубликовать anwser, используя эту библиотеку, если вы хотите. – pwnsauce
Собирался предложить то же самое, если у вас нет проблем с изменением, дайте argparse выстрел – Samuel