0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Ознакомьтесь с видеороликом<a>https://youtu.be/pXhcPJK5cMc</a></p>
1
<p>Ознакомьтесь с видеороликом<a>https://youtu.be/pXhcPJK5cMc</a></p>
2
<p><strong>docopt</strong>поможет вам:</p>
2
<p><strong>docopt</strong>поможет вам:</p>
3
<ul><li>определить интерфейс приложения командной строки</li>
3
<ul><li>определить интерфейс приложения командной строки</li>
4
<li>автоматически генерировать парсер для него</li>
4
<li>автоматически генерировать парсер для него</li>
5
</ul><p><strong>docopt</strong>основан на соглашениях, которые десятилетиями использовались в справочных сообщениях и страницах помощи для описания интерфейса программ. Описание интерфейса в<strong>docopt</strong>- это формализованное справочное сообщение. Например:</p>
5
</ul><p><strong>docopt</strong>основан на соглашениях, которые десятилетиями использовались в справочных сообщениях и страницах помощи для описания интерфейса программ. Описание интерфейса в<strong>docopt</strong>- это формализованное справочное сообщение. Например:</p>
6
<p>Пример описывает интерфейс исполняемого файла<strong>naval_fate</strong>, который может быть вызван различными комбинациями<em>команд</em>(<strong>ship</strong>,<strong>new</strong>,<strong>move</strong>и др.).),<em>параметры</em>(<strong>-h</strong>,<strong>--help</strong>,<strong>--speed=kn</strong>и др.) и позиционные<em>аргументы</em>(<strong>name</strong>,<strong>x</strong>,<strong>y</strong>).</p>
6
<p>Пример описывает интерфейс исполняемого файла<strong>naval_fate</strong>, который может быть вызван различными комбинациями<em>команд</em>(<strong>ship</strong>,<strong>new</strong>,<strong>move</strong>и др.).),<em>параметры</em>(<strong>-h</strong>,<strong>--help</strong>,<strong>--speed=kn</strong>и др.) и позиционные<em>аргументы</em>(<strong>name</strong>,<strong>x</strong>,<strong>y</strong>).</p>
7
<p>Пример использует квадратные скобки "<strong>[ ]</strong>", круглые скобки "<strong>( )</strong>", знак вертикальной черты "<strong>|</strong>" и многоточие "<strong>...</strong>" для описания соответственно необязательных, обязательных, взаимоисключающих и повторяющихся элементов. Вместе эти элементы образуют допустимые шаблоны использования, каждый из которых начинается с имени программы<strong>naval_fate</strong>.</p>
7
<p>Пример использует квадратные скобки "<strong>[ ]</strong>", круглые скобки "<strong>( )</strong>", знак вертикальной черты "<strong>|</strong>" и многоточие "<strong>...</strong>" для описания соответственно необязательных, обязательных, взаимоисключающих и повторяющихся элементов. Вместе эти элементы образуют допустимые шаблоны использования, каждый из которых начинается с имени программы<strong>naval_fate</strong>.</p>
8
<p>Ниже шаблонов помещен список опций с описаниями. Они описывают, имеет ли опция короткую/длинную форму (<strong>-h</strong>,<strong>--help</strong>), имеет ли опция аргумент (<strong>--speed=kn</strong>), и имеет ли этот аргумент значение по умолчанию (<strong>[default: 10]</strong>).</p>
8
<p>Ниже шаблонов помещен список опций с описаниями. Они описывают, имеет ли опция короткую/длинную форму (<strong>-h</strong>,<strong>--help</strong>), имеет ли опция аргумент (<strong>--speed=kn</strong>), и имеет ли этот аргумент значение по умолчанию (<strong>[default: 10]</strong>).</p>
9
<p>Реализация<strong>docopt</strong>извлекает всю эту информацию и генерирует синтаксический анализатор аргументов командной строки с текстом описания интерфейса в качестве справочного сообщения, которое выводится при вызове программы с параметрами<strong>-h</strong>или<strong>--help</strong>.</p>
9
<p>Реализация<strong>docopt</strong>извлекает всю эту информацию и генерирует синтаксический анализатор аргументов командной строки с текстом описания интерфейса в качестве справочного сообщения, которое выводится при вызове программы с параметрами<strong>-h</strong>или<strong>--help</strong>.</p>
10
<h2>Содержание</h2>
10
<h2>Содержание</h2>
11
<ul><li><a>Шаблоны использования</a></li>
11
<ul><li><a>Шаблоны использования</a></li>
12
<li><a><argument> ARGUMENT</a></li>
12
<li><a><argument> ARGUMENT</a></li>
13
<li><a>-o --option</a></li>
13
<li><a>-o --option</a></li>
14
<li><a>command</a></li>
14
<li><a>command</a></li>
15
<li><a>[optional elements]</a></li>
15
<li><a>[optional elements]</a></li>
16
<li><a>(required elements)</a></li>
16
<li><a>(required elements)</a></li>
17
<li><a>element|another</a></li>
17
<li><a>element|another</a></li>
18
<li><a>element...</a></li>
18
<li><a>element...</a></li>
19
<li><a>[options]</a></li>
19
<li><a>[options]</a></li>
20
<li><a>[--]</a></li>
20
<li><a>[--]</a></li>
21
<li><a>[-]</a></li>
21
<li><a>[-]</a></li>
22
<li><a>Описание опций</a></li>
22
<li><a>Описание опций</a></li>
23
<li><a>Реализации</a></li>
23
<li><a>Реализации</a></li>
24
</ul><h2>Шаблоны использования</h2>
24
</ul><h2>Шаблоны использования</h2>
25
<p>Текст, находящийся между ключевым словом<strong>usage:</strong>(без учета регистра) и явной (видимой) пустой строкой, интерпретируется как список шаблонов использования (usage patterns). Первое слово после<strong>usage:</strong>интерпретируется как имя программы.</p>
25
<p>Текст, находящийся между ключевым словом<strong>usage:</strong>(без учета регистра) и явной (видимой) пустой строкой, интерпретируется как список шаблонов использования (usage patterns). Первое слово после<strong>usage:</strong>интерпретируется как имя программы.</p>
26
<p>Это минимальный пример программы, которая не принимает аргументы командной строки:</p>
26
<p>Это минимальный пример программы, которая не принимает аргументы командной строки:</p>
27
<p>Программа может иметь несколько шаблонов, перечисленных с различными элементами, используемыми для описания шаблона:</p>
27
<p>Программа может иметь несколько шаблонов, перечисленных с различными элементами, используемыми для описания шаблона:</p>
28
<p>Все элементы и конструкции описаны ниже. Мы будем использовать слово "слово" для описания последовательности символов, разделенных или пробелами, или одним из символов из списка" [] () |", или "<strong>...</strong>".</p>
28
<p>Все элементы и конструкции описаны ниже. Мы будем использовать слово "слово" для описания последовательности символов, разделенных или пробелами, или одним из символов из списка" [] () |", или "<strong>...</strong>".</p>
29
<h2><argument> ARGUMENT</h2>
29
<h2><argument> ARGUMENT</h2>
30
<p>Слова, начинающиеся с "<strong><</strong>", и заканчивающиеся "<strong>></strong>" и находящиеся в верхнем регистре, интерпретируются как позиционные аргументы.</p>
30
<p>Слова, начинающиеся с "<strong><</strong>", и заканчивающиеся "<strong>></strong>" и находящиеся в верхнем регистре, интерпретируются как позиционные аргументы.</p>
31
<h2>-o --option</h2>
31
<h2>-o --option</h2>
32
<p>Слова, начинающиеся с одного или двух тире (за исключением самих-по-себе "<strong>-</strong>", "<strong>--</strong>") интерпретируются как соответственно короткие (one-letter) или длинные опции.</p>
32
<p>Слова, начинающиеся с одного или двух тире (за исключением самих-по-себе "<strong>-</strong>", "<strong>--</strong>") интерпретируются как соответственно короткие (one-letter) или длинные опции.</p>
33
<p>Короткие опции могут быть "сложены" ("stacked"), что означает, что<strong>-abc</strong>эквивалентно<strong>-a-b-c</strong>. Длинные опции могут иметь аргументы, указанные после пробела или равные знаку "<strong>=</strong>", например:<strong>--input=ARG</strong>эквивалентно<strong>--input ARG</strong>.</p>
33
<p>Короткие опции могут быть "сложены" ("stacked"), что означает, что<strong>-abc</strong>эквивалентно<strong>-a-b-c</strong>. Длинные опции могут иметь аргументы, указанные после пробела или равные знаку "<strong>=</strong>", например:<strong>--input=ARG</strong>эквивалентно<strong>--input ARG</strong>.</p>
34
<p>Короткие параметры могут иметь аргументы, указанные после необязательного пробела:<strong>-f FILE</strong>эквивалентно<strong>-fFILE</strong>.</p>
34
<p>Короткие параметры могут иметь аргументы, указанные после необязательного пробела:<strong>-f FILE</strong>эквивалентно<strong>-fFILE</strong>.</p>
35
<p>Обратите внимание, что запись<strong>--input ARG</strong>(в отличие от<strong>--input=ARG</strong>) неоднозначна, то есть невозможно определить, является ли<strong>ARG</strong>аргументом опции или позиционным аргументом. В применяемых шаблонах это будет интерпретироваться как параметр с аргументом только в том случае, если приведено описание (приведенное ниже) для этого параметра. В противном случае он будет интерпретироваться как опция и отдельный позиционный аргумент.</p>
35
<p>Обратите внимание, что запись<strong>--input ARG</strong>(в отличие от<strong>--input=ARG</strong>) неоднозначна, то есть невозможно определить, является ли<strong>ARG</strong>аргументом опции или позиционным аргументом. В применяемых шаблонах это будет интерпретироваться как параметр с аргументом только в том случае, если приведено описание (приведенное ниже) для этого параметра. В противном случае он будет интерпретироваться как опция и отдельный позиционный аргумент.</p>
36
<p>Существует такая же двусмысленность с нотацией<strong>-f FILE</strong>и<strong>-fFILE</strong>. В последнем случае невозможно сказать, является ли это ряд сложенных (stacked) коротких вариантов или вариант с аргументом. Эти обозначения будут интерпретироваться как параметр с аргументом только в том случае, если будет предоставлено описание для параметра.</p>
36
<p>Существует такая же двусмысленность с нотацией<strong>-f FILE</strong>и<strong>-fFILE</strong>. В последнем случае невозможно сказать, является ли это ряд сложенных (stacked) коротких вариантов или вариант с аргументом. Эти обозначения будут интерпретироваться как параметр с аргументом только в том случае, если будет предоставлено описание для параметра.</p>
37
<h2>command</h2>
37
<h2>command</h2>
38
<p>Все другие слова, которые не следуют вышеуказанным соглашениям --options или arguments, интерпретируются как (под)команды.</p>
38
<p>Все другие слова, которые не следуют вышеуказанным соглашениям --options или arguments, интерпретируются как (под)команды.</p>
39
<h2>[optional elements]</h2>
39
<h2>[optional elements]</h2>
40
<p>Элементы (параметры (опции), аргументы, команды), заключенные в квадратные скобки "<strong>[ ]</strong>", помечаются как необязательные. Не имеет значения, заключены ли элементы в одну или несколько пар скобок, например:</p>
40
<p>Элементы (параметры (опции), аргументы, команды), заключенные в квадратные скобки "<strong>[ ]</strong>", помечаются как необязательные. Не имеет значения, заключены ли элементы в одну или несколько пар скобок, например:</p>
41
<p>Эквивалентно</p>
41
<p>Эквивалентно</p>
42
<h2>(required elements)</h2>
42
<h2>(required elements)</h2>
43
<p><em>Все элементы обязательны по умолчанию, если они не заключены в скобки</em>"<strong>[ ]</strong>". Однако, иногда необходимо пометить элементы как обязательные явно с помощью круглых скобок "<strong>()</strong>". Например, когда необходимо сгруппировать взаимоисключающие элементы (см. Следующий раздел):</p>
43
<p><em>Все элементы обязательны по умолчанию, если они не заключены в скобки</em>"<strong>[ ]</strong>". Однако, иногда необходимо пометить элементы как обязательные явно с помощью круглых скобок "<strong>()</strong>". Например, когда необходимо сгруппировать взаимоисключающие элементы (см. Следующий раздел):</p>
44
<p>Другой случай использования - когда вам нужно указать, что если один элемент присутствует, то и другой является обязательным, и это вы можете сделать следующим образом:</p>
44
<p>Другой случай использования - когда вам нужно указать, что если один элемент присутствует, то и другой является обязательным, и это вы можете сделать следующим образом:</p>
45
<p>В этом случае, допустимый вызов программы может быть либо без аргументов, либо с двумя аргументами.</p>
45
<p>В этом случае, допустимый вызов программы может быть либо без аргументов, либо с двумя аргументами.</p>
46
<h2>element|another</h2>
46
<h2>element|another</h2>
47
<p>Взаимоисключающие элементы могут быть разделены вертикальной чертой (pipe) "<strong>|</strong>" как ниже:</p>
47
<p>Взаимоисключающие элементы могут быть разделены вертикальной чертой (pipe) "<strong>|</strong>" как ниже:</p>
48
<p>Используйте круглые скобки "<strong>()</strong>" для группировки элементов, когда требуется один из взаимоисключающих случаев. Используйте квадратные скобки "<strong>[ ]</strong>" для группировки элементов, когда ни один из взаимоисключающих случаев не требуется:</p>
48
<p>Используйте круглые скобки "<strong>()</strong>" для группировки элементов, когда требуется один из взаимоисключающих случаев. Используйте квадратные скобки "<strong>[ ]</strong>" для группировки элементов, когда ни один из взаимоисключающих случаев не требуется:</p>
49
<p>Обратите внимание, что указание нескольких шаблонов работает точно так же, как вертикальная черта "<strong>|</strong>", то есть:</p>
49
<p>Обратите внимание, что указание нескольких шаблонов работает точно так же, как вертикальная черта "<strong>|</strong>", то есть:</p>
50
<p>Эквивалентно</p>
50
<p>Эквивалентно</p>
51
<h2>element...</h2>
51
<h2>element...</h2>
52
<p>Используйте многоточие "<strong>...</strong>" чтобы указать, что аргумент (или группа аргументов) слева может быть продублирован один или несколько раз:</p>
52
<p>Используйте многоточие "<strong>...</strong>" чтобы указать, что аргумент (или группа аргументов) слева может быть продублирован один или несколько раз:</p>
53
<p>Вы можете гибко указать количество необходимых аргументов. Например, ниже приведено три разных способа указать, что требуется от ноля аргументов и более:</p>
53
<p>Вы можете гибко указать количество необходимых аргументов. Например, ниже приведено три разных способа указать, что требуется от ноля аргументов и более:</p>
54
<p>Один или больше аргументов</p>
54
<p>Один или больше аргументов</p>
55
<p>Два или больше аргументов (и т.д.)</p>
55
<p>Два или больше аргументов (и т.д.)</p>
56
<h2>[options]</h2>
56
<h2>[options]</h2>
57
<p>"<strong>[options]</strong>" - это ярлык, который позволяет избежать перечисления всех опций (из списка опций с описаниями) в шаблоне. Например:</p>
57
<p>"<strong>[options]</strong>" - это ярлык, который позволяет избежать перечисления всех опций (из списка опций с описаниями) в шаблоне. Например:</p>
58
<p>Эквивалентно:</p>
58
<p>Эквивалентно:</p>
59
<p>Это может быть полезно, если у вас много вариантов, и все они применимы к одному из шаблонов. Кроме того, если у вас есть как короткие, так и длинные версии опций (указанные в описании опций), вы можете любую из них использовать в шаблоне:</p>
59
<p>Это может быть полезно, если у вас много вариантов, и все они применимы к одному из шаблонов. Кроме того, если у вас есть как короткие, так и длинные версии опций (указанные в описании опций), вы можете любую из них использовать в шаблоне:</p>
60
<p>Более подробная информация о том, как делать описания опций, будет приведена ниже.</p>
60
<p>Более подробная информация о том, как делать описания опций, будет приведена ниже.</p>
61
<h2>[--]</h2>
61
<h2>[--]</h2>
62
<p>В тех случаях когда не является частью опции, двойное тире "<strong>--</strong>" часто используется по соглашению для разделения опций и позиционных аргументов, чтобы обрабатывать случаи, когда, например, имена файлов могут быть ошибочно приняты за опции. Чтобы поддержать это соглашение, добавьте "<strong>[--]</strong>" в свои шаблоны перед позиционными аргументами.</p>
62
<p>В тех случаях когда не является частью опции, двойное тире "<strong>--</strong>" часто используется по соглашению для разделения опций и позиционных аргументов, чтобы обрабатывать случаи, когда, например, имена файлов могут быть ошибочно приняты за опции. Чтобы поддержать это соглашение, добавьте "<strong>[--]</strong>" в свои шаблоны перед позиционными аргументами.</p>
63
<p>Помимо этого особого значения, "<strong>--</strong>" - это просто обычная команда, поэтому вы можете применить любые ранее описанные операции, например, сделать ее необходимой (отбросив скобки "<strong>[ ]</strong>")</p>
63
<p>Помимо этого особого значения, "<strong>--</strong>" - это просто обычная команда, поэтому вы можете применить любые ранее описанные операции, например, сделать ее необходимой (отбросив скобки "<strong>[ ]</strong>")</p>
64
<h2>[-]</h2>
64
<h2>[-]</h2>
65
<p>Одиночное тире "<strong>-</strong>", в тех случаях когда не является частью опции, часто используется по соглашению для обозначения того, что программа должна обрабатывать stdin, а не файл. Если вы хотите следовать этому соглашению, добавьте "<strong>[-]</strong>" в свой шаблон. "<strong>-</strong>" сама по себе это просто обычная команда, которую можно использовать с любым смыслом.</p>
65
<p>Одиночное тире "<strong>-</strong>", в тех случаях когда не является частью опции, часто используется по соглашению для обозначения того, что программа должна обрабатывать stdin, а не файл. Если вы хотите следовать этому соглашению, добавьте "<strong>[-]</strong>" в свой шаблон. "<strong>-</strong>" сама по себе это просто обычная команда, которую можно использовать с любым смыслом.</p>
66
<h2>Описание опций</h2>
66
<h2>Описание опций</h2>
67
<p>Описания опций состоят из списка опций, которые вы помещаете под своими шаблонами использования (usage patterns). Необязательно указывать их, если нет двусмысленности в шаблонах использования (описанных в разделе<strong>--option</strong>выше).</p>
67
<p>Описания опций состоят из списка опций, которые вы помещаете под своими шаблонами использования (usage patterns). Необязательно указывать их, если нет двусмысленности в шаблонах использования (описанных в разделе<strong>--option</strong>выше).</p>
68
<p>Описание опции позволяет указать:</p>
68
<p>Описание опции позволяет указать:</p>
69
<ul><li>что некоторые короткие и длинные варианты опций являются синонимами,</li>
69
<ul><li>что некоторые короткие и длинные варианты опций являются синонимами,</li>
70
<li>что у опции есть аргумент,</li>
70
<li>что у опции есть аргумент,</li>
71
<li>значение по умолчанию для аргумента опции.</li>
71
<li>значение по умолчанию для аргумента опции.</li>
72
</ul><p>Правила следующие:</p>
72
</ul><p>Правила следующие:</p>
73
<p>Каждая строка, которая начинается с "<strong>-</strong>" или "<strong>--</strong>" (не считая пробелов), рассматривается как описание опции, например:</p>
73
<p>Каждая строка, которая начинается с "<strong>-</strong>" или "<strong>--</strong>" (не считая пробелов), рассматривается как описание опции, например:</p>
74
<p>Чтобы указать, что параметр (опция) имеет аргумент, поместите слово, описывающее этот аргумент, после пробела (или знака равно "<strong>=</strong>") как показано ниже. Для обозначения аргументов опций используйте либо<strong><угловые скобки>,</strong>либо соглашение верхнего регистра (<strong>UPPER-CASE</strong>). Вы можете использовать запятую, если хотите разделить параметры. В приведенном ниже примере обе строки допустимы, однако рекомендуется придерживаться одного стиля.</p>
74
<p>Чтобы указать, что параметр (опция) имеет аргумент, поместите слово, описывающее этот аргумент, после пробела (или знака равно "<strong>=</strong>") как показано ниже. Для обозначения аргументов опций используйте либо<strong><угловые скобки>,</strong>либо соглашение верхнего регистра (<strong>UPPER-CASE</strong>). Вы можете использовать запятую, если хотите разделить параметры. В приведенном ниже примере обе строки допустимы, однако рекомендуется придерживаться одного стиля.</p>
75
<p>Используйте два пробела для отделения параметров от неформального описания.</p>
75
<p>Используйте два пробела для отделения параметров от неформального описания.</p>
76
<p>Если вы хотите установить значение по умолчанию для параметра с аргументом, поместите его в описание параметра в форме<strong>[default: <the-default-value>]</strong>.</p>
76
<p>Если вы хотите установить значение по умолчанию для параметра с аргументом, поместите его в описание параметра в форме<strong>[default: <the-default-value>]</strong>.</p>
77
<p>Поупражняйтесь с docopt в браузере<a>https://try.docopt.org/</a></p>
77
<p>Поупражняйтесь с docopt в браузере<a>https://try.docopt.org/</a></p>
78
<h2>Реализации</h2>
78
<h2>Реализации</h2>
79
<p>docopt доступен на многих языках программирования. Официальные реализации перечислены в аккаунте<a>организации docopt на GitHub</a>.</p>
79
<p>docopt доступен на многих языках программирования. Официальные реализации перечислены в аккаунте<a>организации docopt на GitHub</a>.</p>
80
<p>Адаптированный перевод материала с сайта<a>docopt.org</a>, подготовил Константин Жаринов.</p>
80
<p>Адаптированный перевод материала с сайта<a>docopt.org</a>, подготовил Константин Жаринов.</p>