Как я могу обработать параметры командной строки в Python?

Вы можете использовать limit.h , чтобы выяснить, какие самые большие целочисленные значения в вашей системе. Вы можете использовать float.h , чтобы выяснить, какие самые большие значения с плавающей точкой.

Вот пример для limit.h:

#include 
#include 

int main() {
    printf("INT_MAX: %d\n", INT_MAX);
    printf("UINT_MAX: %u\n", UINT_MAX);
    printf("LONG_MAX: %ld\n", LONG_MAX);
    printf("ULONG_MAX: %lu\n", ULONG_MAX);
}

Я не уверен, что твой инструктор имеет в виду под «на единицу меньше, чем максимальное плавание». На единицу меньше, чем максимальное число с плавающей запятой, не представляется.

Независимо от того, какое значение я присваиваю плавающему для его проверки, он печатает что-то другое в printf

blockquote>

Плавающая точка не может точно представлять все числа. Вот как определить, можете ли вы представить это точно:

  1. Преобразовать в дробь
  2. Уменьшить дробь
  3. Проверьте, является ли знаменатель степенью двойки.

Пример: Можно ли точно представить 0.1?

  1. Сначала преобразуйте его в дробь: 1/10
  2. Затем уменьшите: 1/10
  3. 10 не является степенью двойки. Следовательно, 0.1 не может быть точно представлено.

26
задан Jonik 24 April 2010 в 17:26
поделиться

5 ответов

Как другие ответили, optparse является наилучшим вариантом, но если Вы просто хотите быстрый код, пробуют что-то вроде этого:

import sys, re

first_re = re.compile(r'^\d{3} 

РЕДАКТИРОВАНИЕ : вот optparse пример, потому что столько людей отвечает на optparse, действительно не объясняя, почему, или объяснение, что необходимо изменить, чтобы заставить его работать.

основная причина для использования optparse является этим, дает Вам больше гибкости для расширения позже и дает Вам больше гибкости на командной строке. Другими словами, Ваши опции могут появиться в любом порядке, и сообщения использования сгенерированы автоматически. Однако, чтобы заставить его работать с optparse необходимо изменить спецификации для помещения '-' или '-' перед дополнительными аргументами, и необходимо позволить всем аргументам быть в любом порядке.

, Таким образом, вот пример с помощью optparse:

import sys, re, optparse

first_re = re.compile(r'^\d{3} 

различия здесь с optparse и Вашей спецификацией - то, что теперь у Вас могут быть командные строки как:

python script.py --debug --xls 001

и можно легко добавить новые опции путем вызова синтаксического анализатора add_option ()

) parser = optparse.OptionParser() parser.set_defaults(debug=False,xls=False) parser.add_option('--debug', action='store_true', dest='debug') parser.add_option('--xls', action='store_true', dest='xls') (options, args) = parser.parse_args() if len(args) == 1: if first_re.match(args[0]): print "Primary argument is : ", args[0] else: raise ValueError("First argument should be ...") elif len(args) > 1: raise ValueError("Too many command line arguments") if options.debug: print 'debug flag' if options.xls: print 'xls flag'

различия здесь с optparse и Вашей спецификацией - то, что теперь у Вас могут быть командные строки как:

python script.py --debug --xls 001

и можно легко добавить новые опции путем вызова синтаксического анализатора add_option ()

) if len(sys.argv) > 1: if first_re.match(sys.argv[1]): print "Primary argument is : ", sys.argv[1] else: raise ValueError("First argument should be ...") args = sys.argv[2:] else: args = () # ... anywhere in code ... if 'debug' in args: print 'debug flag' if 'xls' in args: print 'xls flag'

РЕДАКТИРОВАНИЕ : вот optparse пример, потому что столько людей отвечает на optparse, действительно не объясняя, почему, или объяснение, что необходимо изменить, чтобы заставить его работать.

основная причина для использования optparse является этим, дает Вам больше гибкости для расширения позже и дает Вам больше гибкости на командной строке. Другими словами, Ваши опции могут появиться в любом порядке, и сообщения использования сгенерированы автоматически. Однако, чтобы заставить его работать с optparse необходимо изменить спецификации для помещения '-' или '-' перед дополнительными аргументами, и необходимо позволить всем аргументам быть в любом порядке.

, Таким образом, вот пример с помощью optparse:

import sys, re, optparse

first_re = re.compile(r'^\d{3} 

различия здесь с optparse и Вашей спецификацией - то, что теперь у Вас могут быть командные строки как:

python script.py --debug --xls 001

и можно легко добавить новые опции путем вызова синтаксического анализатора add_option ()

) parser = optparse.OptionParser() parser.set_defaults(debug=False,xls=False) parser.add_option('--debug', action='store_true', dest='debug') parser.add_option('--xls', action='store_true', dest='xls') (options, args) = parser.parse_args() if len(args) == 1: if first_re.match(args[0]): print "Primary argument is : ", args[0] else: raise ValueError("First argument should be ...") elif len(args) > 1: raise ValueError("Too many command line arguments") if options.debug: print 'debug flag' if options.xls: print 'xls flag'

различия здесь с optparse и Вашей спецификацией - то, что теперь у Вас могут быть командные строки как:

python script.py --debug --xls 001

и можно легко добавить новые опции путем вызова синтаксического анализатора add_option ()

31
ответ дан Van Gale 28 November 2019 в 07:06
поделиться

Посмотрите на модуль optparse . Работа с sys.argv хороша для действительно простых вещей, но она быстро выходит из-под контроля.

Обратите внимание, что вам может быть проще использовать optparse, если вы можете немного изменить формат аргумента; например заменить debug на --debug и xls на --xls или --output=xls.

15
ответ дан John Fouhy 28 November 2019 в 07:06
поделиться

optparse является Вашим лучшим другом для парсинга командной строки. Также изучите argparse; это не находится в стандартной библиотеке, все же.

2
ответ дан regan 28 November 2019 в 07:06
поделиться

Если вы хотите реализовать фактические ключи командной строки, посмотрите getopt . Его также невероятно просто использовать.

2
ответ дан 28 November 2019 в 07:06
поделиться

Van Gale в основном корректен в использовании регулярного выражения против аргумента. Однако не абсолютно необходимо сделать все опцией при использовании optparse, который разделяет sys.argv на опции и аргументы, на основе того, является ли "-" или "-" впереди или нет. Некоторый пример кода для прохождения через просто аргументов:

import sys
import optparse

claParser = optparse.OptionParser()
claParser.add_option(
(opts, args) = claParser.parse_args()
if (len(args) >= 1):
  print "Arguments:"
  for arg in args:
    print "  " + arg
else:
  print "No arguments"
sys.exit(0)

Да, массив args анализируется, почти такой же путь как sys.argv был бы, но способность легко добавить опции в случае необходимости была добавлена. Для больше о optparse, проверьте соответствующий документ .

Python
0
ответ дан PTBNL 28 November 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: