nntplib.md
1> **Источник:** https://python-all.ru/3.0/library/nntplib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `nntplib` – клиент протокола NNTP89Этот модуль определяет класс [`NNTP`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP), который реализует клиентскую сторону протокола NNTP. Его можно использовать для создания программы чтения новостей, отправки сообщений или автоматической обработки новостей. Дополнительную информацию о NNTP (Network News Transfer Protocol, протокол передачи сетевых новостей) см. в [**RFC 977**](https://python-all.ru/3.0/library/nntplib.html).1011Вот два небольших примера использования. Чтобы вывести статистику по группе новостей и напечатать темы последних 10 статей:1213```python14>>> s = NNTP('news.cwi.nl')15>>> resp, count, first, last, name = s.group('comp.lang.python')16>>> print('Group', name, 'has', count, 'articles, range', first, 'to', last)17Group comp.lang.python has 59 articles, range 3742 to 380318>>> resp, subs = s.xhdr('subject', first + '-' + last)19>>> for id, sub in subs[-10:]: print(id, sub)20...213792 Re: Removing elements from a list while iterating...223793 Re: Who likes Info files?233794 Emacs and doc strings243795 a few questions about the Mac implementation253796 Re: executable python scripts263797 Re: executable python scripts273798 Re: a few questions about the Mac implementation283799 Re: PROPOSAL: A Generic Python Object Interface for Python C Modules293802 Re: executable python scripts303803 Re: \POSIX{} wait and SIGCHLD31>>> s.quit()32'205 news.cwi.nl closing connection. Goodbye.'33```3435Чтобы опубликовать статью из файла (подразумевается, что статья имеет верные заголовки):3637```python38>>> s = NNTP('news.cwi.nl')39>>> f = open('/tmp/article')40>>> s.post(f)41'240 Article posted successfully.'42>>> s.quit()43'205 news.cwi.nl closing connection. Goodbye.'44```4546Сам модуль определяет следующие элементы:4748#### `[nntplib.NNTP]class nntplib.NNTP(host[, port[, user[, password[, readermode][, usenetrc]]]])`4950Возвращает новый экземпляр класса5152[`NNTP`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP)5354, представляющий подключение к серверу NNTP, работающему на узле5556*host*5758и ожидающему на порту5960*port*6162. По умолчанию6364*port*6566равен 119. Если указаны необязательные6768*user*6970и7172*password*7374, или если подходящие учётные данные есть в7576`/.netrc`7778и необязательный флаг7980*usenetrc*8182имеет значение true (по умолчанию), для идентификации и аутентификации пользователя на сервере используются команды8384`AUTHINFO USER`8586и8788`AUTHINFO PASS`8990. Если необязательный флаг9192*readermode*9394равен true, перед выполнением аутентификации отправляется команда9596`mode reader`9798. Режим чтения иногда требуется, если вы подключаетесь к серверу NNTP на локальной машине и собираетесь вызывать команды, специфичные для чтения, например99100`group`101102. Если возникают неожиданные103104[`NNTPPermanentError`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTPPermanentError)105106, возможно, потребуется установить107108*readermode*109110. Значением111112*readermode*113114по умолчанию является115116`None`117118. Значением119120*usenetrc*121122по умолчанию является123124`True`125126.127128#### `[nntplib.NNTPError]exception nntplib.NNTPError`129130Этот класс, производный от стандартного исключения131132[`Exception`](https://python-all.ru/3.0/library/exceptions.html#exceptions.Exception)133134, является базовым для всех исключений, вызываемых модулем135136`nntplib`137138.139140#### `[nntplib.NNTPReplyError]exception nntplib.NNTPReplyError`141142Исключение, вызываемое при получении от сервера неожиданного ответа. Для обратной совместимости исключение143144`error_reply`145146эквивалентно данному классу.147148#### `[nntplib.NNTPTemporaryError]exception nntplib.NNTPTemporaryError`149150Исключение, вызываемое при получении кода ошибки в диапазоне 400–499. Для обратной совместимости исключение151152`error_temp`153154эквивалентно данному классу.155156#### `[nntplib.NNTPPermanentError]exception nntplib.NNTPPermanentError`157158Исключение, вызываемое при получении кода ошибки в диапазоне 500–599. Для обратной совместимости исключение159160`error_perm`161162эквивалентно данному классу.163164#### `[nntplib.NNTPProtocolError]exception nntplib.NNTPProtocolError`165166Исключение, вызываемое при получении от сервера ответа, который не начинается с цифры в диапазоне 1–5. Для обратной совместимости исключение167168`error_proto`169170эквивалентно данному классу.171172#### `[nntplib.NNTPDataError]exception nntplib.NNTPDataError`173174Исключение, вызываемое при ошибке в данных ответа. Для обратной совместимости исключение175176`error_data`177178эквивалентно данному классу.179180## Объекты NNTP181182Экземпляры NNTP имеют следующие методы. *response*, возвращаемый как первый элемент кортежа результатов почти всех методов, – это ответ сервера: строка, начинающаяся с трёхзначного кода. Если ответ сервера указывает на ошибку, метод вызывает одно из перечисленных выше исключений.183184#### `[nntplib.NNTP.getwelcome]NNTP.getwelcome()`185186Возвращает приветственное сообщение, отправленное сервером в ответ на начальное подключение. (Это сообщение иногда содержит отказ от ответственности или справочную информацию, которая может быть полезна пользователю.)187188#### `[nntplib.NNTP.set_debuglevel]NNTP.set_debuglevel(level)`189190Устанавливает уровень отладки экземпляра. Он управляет объёмом выводимых отладочных сообщений. Значение по умолчанию,191192`0`193194, не выводит отладочные сообщения. Значение195196`1`197198выдаёт умеренное количество отладочной информации, обычно одну строку на запрос или ответ. Значение199200`2`201202или больше выводит максимальный объём отладочной информации, регистрируя каждую отправленную и полученную строку соединения (включая текст сообщения).203204#### `[nntplib.NNTP.newgroups]NNTP.newgroups(date, time[, file])`205206Отправляет команду207208`NEWGROUPS`209210. Аргумент211212*date*213214должен быть строкой вида215216`'yymmdd'`217218, указывающей дату, а219220*time*221222– строкой вида223224`'hhmmss'`225226, указывающей время. Возвращает кортеж227228`(response, groups)`229230, где231232*groups*233234– список названий групп, появившихся после указанных даты и времени. Если задан параметр235236*file*237238, то вывод команды239240`NEWGROUPS`241242сохраняется в файл. Если243244*file*245246– строка, то метод открывает файловый объект с таким именем, записывает в него, а затем закрывает. Если247248*file*249250– файловый объект, то он начинает вызывать251252`write()`253254для сохранения строк вывода команды. Если255256*file*257258задан, то возвращаемый259260*list*261262будет пустым списком.263264#### `[nntplib.NNTP.newnews]NNTP.newnews(group, date, time[, file])`265266Отправляет команду267268`NEWNEWS`269270. Здесь271272*group*273274– это название группы или275276`'*'`277278, а279280*date*281282и283284*time*285286имеют тот же смысл, что и для287288[`newgroups()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.newgroups)289290. Возвращает кортеж291292`(response, articles)`293294, где295296*articles*297298– список идентификаторов сообщений. Если задан параметр299300*file*301302, то вывод команды303304`NEWNEWS`305306сохраняется в файл. Если307308*file*309310– строка, то метод открывает файловый объект с таким именем, записывает в него, а затем закрывает. Если311312*file*313314– файловый объект, то он начинает вызывать315316`write()`317318для сохранения строк вывода команды. Если319320*file*321322задан, то возвращаемый323324*list*325326будет пустым списком.327328#### `[nntplib.NNTP.list]NNTP.list([file])`329330Отправляет команду331332`LIST`333334. Возвращает кортеж335336`(response, list)`337338, где339340*list*341342– это список кортежей. Каждый кортеж имеет вид343344`(group, last, first, flag)`345346, где347348*group*349350– название группы,351352*last*353354и355356*first*357358– номера последней и первой статьи (в виде строк), а359360*flag*361362–363364`'y'`365366, если публикация разрешена,367368`'n'`369370, если нет, и371372`'m'`373374, если группа модерируется. (Обратите внимание на порядок:375376*last*377378,379380*first*381382.) Если задан параметр383384*file*385386, то вывод команды387388`LIST`389390сохраняется в файл. Если391392*file*393394– строка, то метод открывает файловый объект с таким именем, записывает в него, а затем закрывает. Если395396*file*397398– файловый объект, то он начинает вызывать399400`write()`401402на нём для сохранения строк вывода команды. Если403404*file*405406задан, то возвращаемый407408*list*409410будет пустым списком.411412#### `[nntplib.NNTP.descriptions]NNTP.descriptions(grouppattern)`413414Отправляет команду415416`LIST NEWSGROUPS`417418, где419420*grouppattern*421422– строка wildmat, как указано в RFC2980 (по сути, это те же шаблоны подстановки, что в DOS или UNIX). Возвращает пару423424`(response, list)`425426, где427428*list*429430– список кортежей, содержащих431432`(name, title)`433434.435436#### `[nntplib.NNTP.description]NNTP.description(group)`437438Получает описание для одной группы *group*. Если совпадает несколько групп (если ‘group’ – это строка шаблона wildmat), возвращается первое совпадение. Если ни одна группа не совпадает, возвращается пустая строка.439440Этот метод опускает код ответа сервера. Если код ответа нужен, используйте [`descriptions()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.descriptions).441442#### `[nntplib.NNTP.group]NNTP.group(name)`443444Отправляет команду445446`GROUP`447448, где449450*name*451452– название группы. Возвращает кортеж453454`(response, count, first, last, name)`455456, где457458*count*459460– (оценочное) количество статей в группе,461462*first*463464– номер первой статьи в группе,465466*last*467468– номер последней статьи в группе, а469470*name*471472– название группы. Числа возвращаются в виде строк.473474#### `[nntplib.NNTP.help]NNTP.help([file])`475476Отправляет команду477478`HELP`479480. Возвращает кортеж481482`(response, list)`483484, где485486*list*487488– это список строк справки. Если задан параметр489490*file*491492, то вывод команды493494`HELP`495496сохраняется в файл. Если497498*file*499500– строка, то метод открывает файловый объект с таким именем, записывает в него, а затем закрывает. Если501502*file*503504– файловый объект, то он начинает вызывать505506`write()`507508для сохранения строк вывода команды. Если509510*file*511512задан, то возвращаемый513514*list*515516будет пустым списком.517518#### `[nntplib.NNTP.stat]NNTP.stat(id)`519520Отправляет команду521522`STAT`523524, где525526*id*527528– идентификатор сообщения (заключённый в529530`'<'`531532и533534`'>'`535536) или номер статьи (в виде строки). Возвращает тройку537538`(response, number, id)`539540, где541542*number*543544– номер статьи (в виде строки), а545546*id*547548– идентификатор сообщения (заключённый в549550`'<'`551552и553554`'>'`555556).557558#### `[nntplib.NNTP.next]NNTP.next()`559560Отправляет команду561562`NEXT`563564. Возвращаемое значение – как у565566[`stat()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.stat)567568.569570#### `[nntplib.NNTP.last]NNTP.last()`571572Отправляет команду573574`LAST`575576. Возвращаемое значение – как у577578[`stat()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.stat)579580.581582#### `[nntplib.NNTP.head]NNTP.head(id)`583584Отправляет команду585586`HEAD`587588, где589590*id*591592имеет то же значение, что и для593594[`stat()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.stat)595596. Возвращает кортеж597598`(response, number, id, list)`599600, где первые три элемента такие же, как для601602[`stat()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.stat)603604, а605606*list*607608– это список заголовков статьи ( неинтерпретированный список строк без завершающих переводов строк).609610#### `[nntplib.NNTP.body]NNTP.body(id[, file])`611612Отправляет команду613614`BODY`615616, где617618*id*619620имеет тот же смысл, что и для621622[`stat()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.stat)623624. Если задан параметр625626*file*627628, то тело сохраняется в файл. Если629630*file*631632– строка, то метод открывает файловый объект с таким именем, записывает в него, а затем закрывает. Если633634*file*635636– файловый объект, то он начинает вызывать637638`write()`639640для сохранения строк тела. Возвращаемое значение как для641642[`head()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.head)643644. Если645646*file*647648задан, то возвращаемый649650*list*651652будет пустым списком.653654#### `[nntplib.NNTP.article]NNTP.article(id)`655656Отправляет команду657658`ARTICLE`659660, где661662*id*663664имеет то же значение, что и для665666[`stat()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.stat)667668. Возвращаемое значение такое же, как для669670[`head()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.head)671672.673674#### `[nntplib.NNTP.slave]NNTP.slave()`675676Отправляет команду677678`SLAVE`679680. Возвращает681682*response*683684сервера.685686#### `[nntplib.NNTP.xhdr]NNTP.xhdr(header, string[, file])`687688Отправляет команду689690`XHDR`691692. Эта команда не определена в RFC, но является распространённым расширением. Аргумент693694*header*695696– это ключевое слово заголовка, например697698`'subject'`699700. Аргумент701702*string*703704должен иметь вид705706`'first-last'`707708, где709710*first*711712и713714*last*715716– номера первой и последней статьи для поиска. Возвращает кортеж717718`(response, list)`719720, где721722*list*723724– это список пар725726`(id, text)`727728, где729730*id*731732– номер статьи (в виде строки), а733734*text*735736– текст запрошенного заголовка для этой статьи. Если задан параметр737738*file*739740, то вывод команды741742`XHDR`743744сохраняется в файл. Если745746*file*747748– строка, то метод открывает файловый объект с таким именем, записывает в него, а затем закрывает. Если749750*file*751752– файловый объект, то он начинает вызывать753754`write()`755756на нём для сохранения строк вывода команды. Если757758*file*759760задан, то возвращаемый761762*list*763764будет пустым списком.765766#### `[nntplib.NNTP.post]NNTP.post(file)`767768Отправляет статью с помощью команды769770`POST`771772. Аргумент773774*file*775776– это открытый файловый объект, который читается до конца (EOF) с помощью его метода777778`readline()`779780. Это должна быть правильно оформленная новостная статья, включающая необходимые заголовки. Метод781782[`post()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.post)783784автоматически экранирует строки, начинающиеся с785786`.`787788.789790#### `[nntplib.NNTP.ihave]NNTP.ihave(id, file)`791792Отправляет команду793794`IHAVE`795796.797798*id*799800– это идентификатор сообщения (заключённый в801802`'<'`803804и805806`'>'`807808). Если ответ не является ошибкой, обрабатывать809810*file*811812точно так же, как в методе813814[`post()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.post)815816.817818#### `[nntplib.NNTP.date]NNTP.date()`819820Возвращает тройку821822`(response, date, time)`823824, содержащую текущую дату и время в форме, подходящей для методов825826[`newnews()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.newnews)827828и829830[`newgroups()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.newgroups)831832. Это необязательное расширение NNTP, которое может не поддерживаться всеми серверами.833834#### `[nntplib.NNTP.xgtitle]NNTP.xgtitle(name[, file])`835836Обрабатывает команду `XGTITLE` и возвращает пару `(response, list)`, где *list* – это список кортежей вида `(name, title)`. Если указан параметр *file*, то вывод команды `XGTITLE` сохраняется в файл. Если *file* – строка, метод открывает файловый объект с этим именем, записывает в него и закрывает. Если *file* – файловый объект, то на нём вызывается `write()` для сохранения строк вывода команды. Если *file* указан, возвращаемый *list* будет пустым списком. Это необязательное расширение NNTP, которое может не поддерживаться некоторыми серверами.837838В RFC2980 говорится: «Рекомендуется объявить это расширение устаревшим». Используйте [`descriptions()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.descriptions) или [`description()`](https://python-all.ru/3.0/library/nntplib.html#nntplib.NNTP.description) вместо него.839840#### `[nntplib.NNTP.xover]NNTP.xover(start, end[, file])`841842Возвращает пару843844`(resp, list)`845846.847848*list*849850– это список кортежей, по одному на каждую статью в диапазоне, ограниченном номерами статей851852*start*853854и855856*end*857858. Каждый кортеж имеет вид859860`(article number, subject, poster, date, id, references, size, lines)`861862. Если указан параметр863864*file*865866, то вывод команды867868`XOVER`869870сохраняется в файл. Если871872*file*873874– строка, метод открывает файловый объект с этим именем, записывает в него и закрывает. Если875876*file*877878– файловый объект, то на нём вызывается879880`write()`881882для сохранения строк вывода команды. Если883884*file*885886указан, возвращаемый887888*list*889890будет пустым списком. Это необязательное расширение NNTP, которое может не поддерживаться всеми серверами.891892#### `[nntplib.NNTP.xpath]NNTP.xpath(id)`893894Возвращает пару895896`(resp, path)`897898, где899900*path*901902– это путь к каталогу статьи с идентификатором сообщения903904*id*905906. Это необязательное расширение NNTP и может не поддерживаться всеми серверами.907908#### `[nntplib.NNTP.quit]NNTP.quit()`909910Отправляет команду911912`QUIT`913914и закрывает соединение. После вызова этого метода не следует вызывать другие методы объекта NNTP.915