HTML Diff
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>&lt;argument&gt; ARGUMENT</a></li>
12 <li><a>&lt;argument&gt; 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>&lt;argument&gt; ARGUMENT</h2>
29 <h2>&lt;argument&gt; ARGUMENT</h2>
30 <p>Слова, начинающиеся с "<strong>&lt;</strong>", и заканчивающиеся "<strong>&gt;</strong>" и находящиеся в верхнем регистре, интерпретируются как позиционные аргументы.</p>
30 <p>Слова, начинающиеся с "<strong>&lt;</strong>", и заканчивающиеся "<strong>&gt;</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>&lt;угловые скобки&gt;,</strong>либо соглашение верхнего регистра (<strong>UPPER-CASE</strong>). Вы можете использовать запятую, если хотите разделить параметры. В приведенном ниже примере обе строки допустимы, однако рекомендуется придерживаться одного стиля.</p>
74 <p>Чтобы указать, что параметр (опция) имеет аргумент, поместите слово, описывающее этот аргумент, после пробела (или знака равно "<strong>=</strong>") как показано ниже. Для обозначения аргументов опций используйте либо<strong>&lt;угловые скобки&gt;,</strong>либо соглашение верхнего регистра (<strong>UPPER-CASE</strong>). Вы можете использовать запятую, если хотите разделить параметры. В приведенном ниже примере обе строки допустимы, однако рекомендуется придерживаться одного стиля.</p>
75 <p>Используйте два пробела для отделения параметров от неформального описания.</p>
75 <p>Используйте два пробела для отделения параметров от неформального описания.</p>
76 <p>Если вы хотите установить значение по умолчанию для параметра с аргументом, поместите его в описание параметра в форме<strong>[default: &lt;the-default-value&gt;]</strong>.</p>
76 <p>Если вы хотите установить значение по умолчанию для параметра с аргументом, поместите его в описание параметра в форме<strong>[default: &lt;the-default-value&gt;]</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>