root/trunk/ftputil_ru_utf8.txt

Revision 512, 41.9 kB (checked in by schwa, 3 years ago)
Updated documentation for 2.1 beta x. This documentation contains almost
all content changes with respect to 2.1 but the order of the sections is
different (i. e. similar to the 2.0.3 documentation).
  • Property svn:eol-style set to native
Line 
1 ``ftputil`` - высокоуровневая библиотека для клиента FTP протокола
2 ==================================================================
3
4 :Версия:                   2.1 beta
5 :Дата:                     2006-02-18
6 :Резюме:                   высокоуровневая Python библиотека для клиента FTP протокола
7 :Ключевые слова:           FTP, замена ``ftplib``, виртуальная файловая система
8 :Автор:                    Stefan Schwarzer <sschwarzer@sschwarzer.net>
9 :Русский перевод:          Степанов Антон <antymail@mail.ru>
10
11
12 .. contents:: Содержание
13
14 Введение
15 --------
16
17 Модуль ``ftputil`` является высокоуровневым интерфейсом для
18 ftplib_ модуля.Объекты FTPHost позволяют производить
19 большое количество операций, аналогичных операциям в модулях os_ и `os.path`_.
20
21 .. _ftplib: http://www.python.org/doc/current/lib/module-ftplib.html
22 .. _os: http://www.python.org/doc/current/lib/module-os.html
23 .. _`os.path`: http://www.python.org/doc/current/lib/module-os.path.html
24
25 Примеры:
26   ::
27
28     import ftputil
29
30     # download some files from the login directory
31     host = ftputil.FTPHost('ftp.domain.com', 'user', 'password')
32     names = host.listdir(host.curdir)
33     for name in names:
34         if host.path.isfile(name):
35             host.download(name, name, 'b')  # remote, local, binary mode
36
37     # make a new directory and copy a remote file into it
38     host.mkdir('newdir')
39     source = host.file('index.html', 'r')  # file-like object
40     target = host.file('newdir/index.html', 'w')  # file-like object
41     host.copyfileobj(source, target)  # similar to shutil.copyfileobj
42     source.close()
43     target.close()
44
45 Такие методы как `FTPHost.lstat`_ и `FTPHost.stat`_ позволяют узнать размер
46 и время изменения файла. Последний может следовать по ссылкам аналогичным
47 `os.stat`_. Даже, такая функция как `FTPHost.path.walk`_ работает
48 в этой библиотеке.
49
50 .. _`os.stat`: http://www.python.org/doc/current/lib/os-file-dir.html#l2h-1455
51
52 Дистрибутив содержит модуль ``UserTuple``, который обеспечивает
53 совместимость результатов модуля stat_ с версиями Python 2.0 и 2.1.
54
55 .. _stat: http://www.python.org/doc/current/lib/module-stat.html
56
57 Иерархия исключений
58 -------------------
59
60 Исключения находятся в пространстве имен пакета ``ftputil``
61 (например: ``ftputil.TemporaryError``). Они организованы следующим образом
62
63   ::
64
65     FTPError
66         FTPOSError(FTPError, OSError)
67             TemporaryError(FTPOSError)
68             PermanentError(FTPOSError)
69             ParserError(FTPOSError)
70         FTPIOError(FTPError)
71         InternalError(FTPError)
72             RootDirError(InternalError)
73             InaccessibleLoginDirError(InternalError)
74         TimeShiftError(FTPError)
75
76 ниже приведено описание каждого исключения:
77
78 - ``FTPError``
79
80   является корнем иерархии исключений модуля.
81
82
83 - ``FTPOSError``
84
85   потомок ``OSError``. Создан для подобия объектов модуля
86   os и объектов модуля ``FTPHost``. Сравните
87
88   ::
89
90     try:
91         os.chdir('nonexisting_directory')
92     except OSError:
93         ...
94
95   с
96
97   ::
98
99     host = ftputil.FTPHost('host', 'user', 'password')
100     try:
101         host.chdir('nonexisting_directory')
102     except OSError:
103         ...
104
105   Представим функцию,
106
107
108   ::
109
110     def func(path, file):
111         ...
112
113   которая работает в локальной файловой системе и получает  ошибки
114   ``OSErrors``.  Если вы измените список параметров на
115
116   ::
117
118     def func(path, file, os=os):
119         ...
120
121   где параметр ``os`` означает ``os`` модуль, то вызывая функцию
122   как
123
124   ::
125
126     host = ftputil.FTPHost('host', 'user', 'password')
127     func(path, file, os=host)
128
129   Вы сможете использовать тот же самый код как для локальной
130   файловой системы так и для удаленной.
131   Другое подобие между ``OSError`` и ``FTPOSError`` залючается в том,
132   что последний возвращает FTP серверу код ошибки ``errno`` в
133   свойстве объекта-исключения и текст ошибки ``strerror``.
134
135 - ``TemporaryError``
136
137   это исключение вызывается в том случае, если код ошибки
138   полученной от FTP сервера находится в диапазоне от 400 до 499. Это
139   исключение соответствует исключению ``ftplib.error_temp`` (хотя
140   ``TemporaryError`` и ``ftplib.error_temp`` *не являются* идентичными).
141
142 - ``PermanentError``
143
144
145   это исключение вызывается в том случае, если код ошибки
146   полученной от FTP сервера находится в диапазоне от 500 до 599
147   (снова, это исключение подобно, но *не* идентично исключению
148   ``ftplib.error_perm``).
149
150 - ``ParserError``
151
152   ошибка, которая возникает в течение анализа списка каталогов
153   из сервера. Это исключение используется такими методами объекта
154   ``FTPHost`` как: ``stat``, ``lstat``, и ``listdir``.
155
156 - ``FTPIOError``
157
158   это исключение обозначает ошибку ввода/вывода на удаленном
159   компьютере. Эта ошибка, главным образом, связана с файл-подобными
160   объектами которые были использованы при вызове функции
161   ``FTPHost.file`` (``FTPHost.open`` - псевдоним). Сравните:
162
163   ::
164
165     >>> try:
166     ...     f = open('notthere')
167     ... except IOError, obj:
168     ...     print obj.errno
169     ...     print obj.strerror
170     ...
171     2
172     No such file or directory
173
174   с
175
176   ::
177
178     >>> host = ftputil.FTPHost('host', 'user', 'password')
179     >>> try:
180     ...     f = host.open('notthere')
181     ... except IOError, obj:
182     ...     print obj.errno
183     ...     print obj.strerror
184     ...
185     550
186     550 notthere: No such file or directory.
187
188   Как вы можете видеть, отрывки кода подобны. (Однако,
189   коды ошибок не являются одинаковыми.)
190
191 - ``InternalError``
192
193   относится к классу исключений которое вызывается из-за наличия
194   ограничений FTP протокола или в следствие непосредственного выполнения модуля
195   ``ftputil``.
196
197 - ``RootDirError``
198
199   при выполнении ``lstat`` - метода невозможно выполнить
200   ``stat``- запрос к корневому каталогу /.
201   Если Вы знаете *способ* как это сделать, пожайлуста, сообщите
202   мне. :-)
203
204 - ``InaccessibleLoginDirError``
205
206   Это исключение вызывается только в том случае, если выполнятся
207   *одно* из следующих условий:
208
209   - Каталог, в который «Вы» помещаетесь при входе в систему не
210     доступен, тогда запрос ``chdir`` будет прерван.
211
212   - Ваш путь содержит одни пробелы.
213
214 - ``TimeShiftError``
215   используется, чтобы обозначить ошибки, которые касаются метода
216   `time shift`_, например, попытка установить значение, которое не является
217   кратным 1 часу
218
219
220 ``FTPHost`` - объекты
221 ---------------------
222
223 .. _`FTPHost construction`:
224
225 Конструкция
226 ~~~~~~~~~~~
227
228 ``FTPHost`` запрос может быть произведен с использованием следующего вызова:
229
230   ::
231
232     host = ftputil.FTPHost(host, user, password, account,
233                            session_factory=ftplib.FTP)
234
235 Первые четыре параметра - строки с тем же самым значением,
236 что и у FTP класса в ``ftplib`` модуле. Параметр
237 ``session_factory`` may используется для того, чтобы произвести FTP
238 подключение через другие фабрики, чем установленное по умолчанию значение
239 ``ftplib.FTP``. Например, M2Crypto распределение использует безопасный FTP
240 класс, который получен из ``ftplib.FTP``.
241
242 Фактически, все позиционные и ключевые аргументы отличные от
243 ``session_factory`` проходят на фабрику, чтобы выполнить новый
244 фоновый сеанс (который выполняется для каждого открытого удаленного файла;
245 см. ниже).
246
247 Эти функциональные возможности конструктора также позволяют "оборачивать"
248 ``ftplib.FTP`` объекты, чтобы делать то, что невозможно сделать
249 с использованием одного ``ftplib.FTP`` конструктора.
250
251 Например, предположите, что Вы хотите произвести соединение с другим портом,
252 отличным от заданного по умолчанию, но ``ftplib.FTP`` предлагает это сделать
253 только с использованием метода ``connect``, но через другой конструктор.
254 Решение состоит в создании "класса обертки":
255
256   ::
257
258     import ftplib
259     import ftputil
260
261     EXAMPLE_PORT = 50001
262
263     class MySession(ftplib.FTP):
264         def __init__(self, host, userid, password, port):
265             """Act like ftplib.FTP's constructor but connect to other port."""
266             ftplib.FTP.__init__(self)
267             self.connect(host, port)
268             self.login(userid, password)
269
270     # try not to use MySession() as factory, - use the class itself
271     host = ftputil.FTPHost(host, userid, password,
272                            port=EXAMPLE_PORT, session_factory=MySession)
273     # use `host` as usual
274
275 При входе в систему, формат списка каталогов (необходимый для
276 применения stat - методов к файлам и каталогам) определяется
277 автоматически. Если нет, то Вы можете использовать метод
278 `set_directory_format`_ , чтобы установить формат "вручную".
279
280 ``FTPHost`` - свойства и методы
281 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
282
283 Свойства
284 ````````
285
286 - ``curdir``, ``pardir``, ``sep``
287
288   являются строками, которые обозначают текущий и родительский каталог на
289   на отдаленном сервере. Sep опознает разделитель пути. Хотя
290   `RFC 959`_ (Протокол передачи файлов) обращает внимание на то, что эти
291   значения могут зависеть от сервера. Unix машины , кажется, хорошо работают
292   даже для не - Unix серверов.
293
294 .. _`RFC 959`: `RFC 959 - File Transfer Protocol (FTP)`_
295
296 .. _`time shift`:
297
298 Коррекция времени часового пояса
299 ````````````````````````````````
300
301 .. _`set_time_shift`:
302
303 - ``set_time_shift(time_shift)``
304
305   устанавливает так называемое значение сдвига времени (измеряемое в секундах).
306   Сдвиг времени - различие между местным временем сервера и
307   местным временем клиента в данный момент, т.е. по определению:
308
309   ::
310
311     time_shift = server_time - client_time
312
313   Установка этого значения важна, если `upload_if_newer`_ и
314   `download_if_newer`_ работали правильно, даже если часовой пояс
315   FTP сервера отличается от часового пояса клиента (где
316   библиотека ``ftputil`` запущена). Обратите внимание на то, что значение
317   сдвига времени *может быть* отрицательным.
318
319   Если значение сдвига времени является неправльным, например не является кратным 1 часу,
320   или абсолютное зачение больше чем 24 часа, то вызывется исключение: ``TimeShiftError``.
321
322   См. также `synchronize_times`_ как простой способ установки сдвига времени.
323
324 - ``time_shift()``
325
326   возвращает установленное текущее значение сдвига времени. См.
327   ``set_time_shift`` (выше) для его определения.
328
329 .. _`synchronize_times`:
330
331 - ``synchronize_times()``
332
333   синхронизирует локальное время сервера и клиента, так,
334   чтобы методы `upload_if_newer`_ и `download_if_newer`_ правильно работали,
335   даже если клиент и сервер находятся в различных часовых поясах. Для
336   того, чтобы *все* это работало должны выполняться следующие условия:
337
338   - Должно быть установлено подключение между сервером и клиентом.
339
340   - Клиент должен иметь доступ к каталогу, который является текущим, когда
341     ``synchronize_times`` вызывается.
342
343   - Каталог, к которому обращаются *не* должен быть корневым каталогом (т.е. /)
344     FTP сервера.
345
346   Если Вы не можете выполнить эти условия, Вы можете установить
347   значение сдвига времени вручную с использованием `set_time_shift`_. Попытка вызова
348   ``synchronize_times``, если вышеупомянутые условия не выполняются приведет к генерации
349   ``TimeShiftError`` исключения.
350
351 Файлы и каталоги
352 ````````````````
353
354 - ``file(path, mode='r')``
355
356   возвращает файл-подобный объект, который связан с путем на отдаленном
357   главном компьютере. Этот путь может быть абсолютным, или относительным
358   для текущего каталога на отдаленном главном компьютере (этот каталог может быть определен
359   с помощью getcwd метода). Также как и для локальных файлов задается по умолчанию режим - "r",
360   т. е. чтение текстовых файлов. Допустимые режимы - "r",
361   "rb", "w", и "wb".
362
363 - ``open(path, mode='r')``
364
365   является псевдонимом для ``file`` (см. выше).
366
367 - ``copyfileobj(source, target, length=64*1024)``
368
369   копирует содержимое из файл-подобного объекта-источника
370   в файл-подобный объект-адресат. Единственное различие с
371   ``shutil.copyfileobj`` - есть заданный по умолчанию размер буфера.
372
373 - ``close()``
374
375   закрывает соединение с отдаленным компьютером. После этого,
376   взаимодействие с FTP сервером невозможно без создания нового объекта
377   ``FTPHost``.
378
379 - ``getcwd()``
380
381   возвращает абсолютный путь текущего каталога на отдаленном компьютере. Этот
382   метод действует подобно методу ``os.getcwd``.
383
384 - ``chdir(directory)``
385
386   устанавливает текущий каталог на FTP сервере. Это метод похож на метод
387   ``os.chdir``, а Вы что ожидали.:-)
388
389 - ``mkdir(path, [mode])``
390
391   создаёт каталог на отдаленном компьютере. При своём выполнении,
392   не создает  "промежуточные" каталоги, которые уже существуют.
393   При этом параметр ``mode`` игнорируется. Создан
394   для совместимости с ``os.mkdir``,если объект ``FTPHost``
395   вставляется в функцию вместо os модуля (см. подраздел
396   исключений Питона выше).
397
398 - ``makedirs(path, [mode])``
399   работает аналогично команде ``mkdir`` (см. выше, но, также, создаёт "промежуточные"
400   каталоги (также как и команда ``os.makedirs``). Параметр ``mode`` введен
401   только для совместимости с командой ``os.makedirs`` и в данном случае
402   игнорируется.
403
404 - ``rmdir(path)``
405
406   удаляет заданный удаленный каталог.
407
408   В предыдущих версиях ``ftputil``, эта функция зависела от отдаленного
409   сервера, были эти каталоги пустыми или нет. ``ftputil``
410   версии 2.0 по умолчанию позволяет удалять только пустые
411   каталоги.
412
413   Если Вы хотите установить ``ftputil`` 2.0, но при этом произвести
414   минимальные изменения в исходном тексте, добавьте дполнительный параметр
415   ``_remove_only_empty=False``. Обратите внимание, что это метод осуждается и,
416   вероятно, не будет поддерживаться в следующих версиях ``ftputil``.
417
418 - ``remove(path)``
419
420   удаляет файл на отдаленном компьютере (подобен методу ``os.remove``).
421
422 - ``unlink(path)``
423
424   является псевдонимом для ``remove``.
425
426 - ``rename(source, target)``
427
428   переименовывает исходный файл (или каталог) на FTP сервере.
429
430
431 - ``listdir(path)``
432
433   возвращает список, содержащий имена файлов и каталогов
434   по заданном пути; подобен методу ``os.listdir``.
435
436 - ``walk(top, topdown=True, onerror=None)``
437
438   команда обхода дерева каталогов, аналогична команде `os.walk`_ в версии Python 2.3.
439   Фактически, ``FTPHost.walk`` использует код из Python системы с введением
440   необходимых модификаций, см. документацию по языку.
441
442   Если остальные команды библиотеки ftputil могут работать с любой версией Python,
443   то начиная с версии 2.0 и выше, метод ``walk`` требует наличие генераторов
444   и будет работать с версией Python 2.2 и выше.
445
446 .. _`os.walk`: http://docs.python.org/lib/os-file-dir.html#l2h-1638
447
448 Отправка и загрузка файлов
449 ``````````````````````````
450
451 - ``upload(source, target, mode='')``
452
453   копирует локальный файл (с заданным именем, например, в виде строки)
454   на отдаленный компьютер по соответствующему адресу. Как источник, так и адресат
455   могут иметь абсолютные или относительные пути текущего каталога
456   (на локальном или отдаленного компьютере, соответственно).
457   Режим отправки может быть " " или "@" для ASCII, или "b" для двоичного кода.
458   Режим ASCII задан по умолчанию.
459
460 - ``download(source, target, mode='')``
461
462   выполняет загрузку из удаленного источника в конечный файл.
463   И источник и адресат являются параметрами задаваемыми в виде строки.
464   Дополнительное описание применения метода загрузки см. ниже
465
466 .. _`upload_if_newer`:
467
468 - ``upload_if_newer(source, target, mode='')``
469
470   подобен методу копирования. Единственное отличие - то,
471   что файл отправляется, если время последней модификации
472   для исходного файла более современное чем конечного файла,
473   или адресат не существует вообще. Если отправка фактически происходит,
474   то возвращается истинное значение, иначе - ложь.
475
476   Обратите внимание, что этот метод только проверяет существование и/или
477   время модификации источника и конечного файла;
478   что не может привести замене в режиме передачи, например:
479
480   ::
481
482     # transfer in ASCII mode
483     host.upload_if_newer('source_file', 'target_file', 'a')
484     # won't transfer the file again
485     host.upload_if_newer('source_file', 'target_file', 'b')
486
487   точно так же, если передача прервана, а
488   отдаленный файл будет иметь более новую модификацию
489   чем локальный файл, то передача не будет повторена,
490   даже если будет использоваться ``upload_if_newer`` второй раз.
491   Имеются (по крайней мере) две возможности после того, как отправка завершилась неудачей:
492
493   - используйте ``upload`` вместо ``upload_if_newer``, или
494
495   - удалите конечный файл используя ``FTPHost.remove``,
496     затем используте ``upload`` или ``upload_if_newer``, чтобы передать файл снова.
497
498   Если кажется, что файл отправлен "напрасно", то читайте подраздел настройки
499   `time shift`_.
500
501 .. _`download_if_newer`:
502
503 - ``download_if_newer(source, target, mode='')``
504
505   соответствует ``upload_if_newer``, но выполняет загрузку
506   с сервера на локальный компьютер. Читайте описание процесса загрузки
507   с использованием метода ``upload_if_newer``  для того, чтобы узнать больше.
508   Если загрузка фактически произошла, то возвращается истинное значение, иначе - ложь.
509
510   Если кажется, что файл отправлен напрасно, то читайте подраздел настройки
511   `time shift`_.
512
513
514 Stat - методы для файлов и каталогов
515 ````````````````````````````````````
516
517 Методы ``lstat`` и ``stat`` (и другие) основываются
518 на формате  каталога, используемого FTP сервером. При соединении
519 с  компьютером, конструктор  ``FTPHost`` выбирает  формат, который, как он считает,
520 является правильным. Однако, если Вы получите странные результаты
521 (или исключения), следует установить формат каталога
522 "вручную". Установка форамата произойдет незамедлительно после вызова функции:
523
524 .. _`set_directory_format`:
525
526 - ``set_directory_format(server_format)``
527
528   ``server_format`` - представляет собой строку "unix", либо -  "ms". Чтобы
529    выбрать правильный формат, Вы должны запустить из командной строки FTP клиент
530    и вызвать функцию  листинга каталога (большинство клиентов выполняют данную
531    операцию с использованием команды ``DIR``).
532
533   Если результирующие строки  имеют вид:
534
535   ::
536
537       drwxr-sr-x   2 45854    200           512 Jul 30 17:14 image
538       -rw-r--r--   1 45854    200          4604 Jan 19 23:11 index.html
539
540   используйте строку "unix" как аргумент.
541
542   Если вывод имеет вид таких строк:
543
544   ::
545
546       12-07-01  02:05PM       <DIR>          XPLaunch
547       07-17-00  02:08PM             12266720 digidash.exe
548
549   тогда используте "ms" для установки значения ``server_format``.
550
551   Если ни один из вышеупомянутых параметров настройки не поможет,
552   тогда свяжитесь со мной. Был бы очень хорошо, если Вы смогли бы  выслать
553   листинг ошибочного вывода (вывод с использованием команды ``DIR``).
554
555 Если, при запросе, ``lstat`` или ``stat`` методы выдают неправильное время изменения файла,
556 или  неправильно выдают дату, используйте методы, которые работают с учётом разницы во времени
557 (`time shift`_).
558
559 .. _`FTPHost.lstat`:
560
561 - ``lstat(path)``
562
563   возвращает объект, аналогичный объекту ``os.lstat`` (кортеж с
564   дополнительными параметрами;  смотрите документацию по  ``os``
565   модулю). Однако, учитывая характер приложения,
566   следует обратить внимание на следующие аспекты:
567
568   - Результат получается вследствие анализа вывода команды ``DIR``
569     на сервере. Поэтому, результат команды  ``FTPHost.lstat`` не
570     может содержать больше информации чем полученный текст.
571     В особенности:
572
573   - Пользователь и группа пользователей могут  быть определены толоко через строки, но не
574     как числа, и только  сервер выдает эти строки. Это
575     Это обычно относится к самим  Unix серверами, но никак не относится к
576     FTP программам сервера.
577
578   - Значения  времени последней модификации  файла могут быть неточными,
579     все зависит от информации полученной от сервера. Если файл
580     был изменен раньше чем год назад , то точность значения времени
581     изменения файла не будет больше одного дня. Для более новых
582     файлов, точность времени модификации файла  может  быть равной одной минуте.
583
584   - Ссылки могут  быть явными только на тех серверах,
585     которые получают информацию из вывода команды ``DIR``.
586
587   - Пункты, которые не могут быть определены принимают значение ``None``.
588
589   - Также существует  проблема с применением stat - метода к корневому каталогу. В
590     этом случае вызывается ошибка ``RootDirError``. Проблема имеет отношение к
591     алгоритму, используемому в методе ``(l)stat``, и я не знаю ни одного способа, который
592     помог бы её решить.
593
594 .. update for other servers
595
596 ..
597
598   В настоящее время, библиотека ``ftputil`` поддерживает формат MS Robin FTP сервера.
599   Формат который в основном используется Unix серверами также поддерживается. Если
600   Вы нуждаетесь в поддержке других форматов, пожалуйста, свяжитесь со мной
601   по электронной почте. Адрес приведён в конце этого текста.
602
603 .. implement and document support for setting the directory parser
604    "manually"
605
606 .. _`FTPHost.stat`:
607
608 - ``stat(path)``
609   возвращает ``stat`` информацию для файлов, которые указаны по ссылке.
610   Этот метод следует по множеству ссылок, пока регулярный файл или каталог
611   не будут найдены. Если цепочка ссылок зациклена то вызывается исключение:
612   ``PermanentError``.
613
614 ``FTPHost.path``
615 ~~~~~~~~~~~~~~~~
616
617 ``FTPHost`` объекты имеют такое свойство как: ``path``, подобное
618 `os.path`_. Приведенные ниже методы могут прменяться
619 к отдаленному компьютеру с семантикой кода аналогичной семантике кода методов ``os.path``:
620
621 .. _`FTPHost.path.walk`:
622
623 ::
624
625     abspath(path)
626     basename(path)
627     commonprefix(path_list)
628     dirname(path)
629     exists(path)
630     getmtime(path)
631     getsize(path)
632     isabs(path)
633     isdir(path)
634     isfile(path)
635     islink(path)
636     join(path1, path2, ...)
637     normcase(path)
638     normpath(path)
639     split(path)
640     splitdrive(path)
641     splitext(path)
642     walk(path, func, arg)
643
644 ``FTPFile`` - объекты
645 ---------------------
646
647 ``FTPFile`` объекты создаются при вызове конструкций ``FTPHost.file`` (или
648 ``FTPHost.open``) и имеют аналогичные методы, (с теми же параметрами, и с той же семантикой)
649 что и методы, работающие с локальными файлами:
650
651   ::
652
653     close()
654     read([count])
655     readline([count])
656     readlines()
657     write(data)
658     writelines(string_sequence)
659     xreadlines()
660
661 и атрибут ``closed``. Для получения детальной информации смотрите раздел  `File
662 objects`_ в справочнике по библиотеке.
663
664 .. _`file objects`:
665    http://www.python.org/doc/current/lib/bltin-file-objects.html
666
667 Обратите внимание на то, что ``ftputil`` поддерживает и двоичный и текстовый режимы
668 работы со строкой завершающей преобразования.
669
670 Советы и подсказки / FAQ
671 ------------------------
672
673 Где я могу получить самую последнюю версию?
674 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
675
676 Смотрите http://www.sschwarzer.net/python/python_software.html#ftputil.
677 Объявления относительно новых версий будут рассылаться списку адресатов (см. вопрос ниже).
678 Объявления относительно появления главных модификаций отправляются в
679 службу новостей `comp.lang.python`_ .
680
681 .. _`comp.lang.python`: news:comp.lang.python
682
683 Имеется ли почтовый ящик на ``ftputil``?
684 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
685
686 Да, вы можете подписаться на
687 http://codespeak.net/mailman/listinfo/ftputil
688 или прочитать архивы на http://codespeak.net/pipermail/ftputil/.
689
690 Я нашел ошибку! Что теперь?
691 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
692
693 Перед сообщением об ошибке, удостоверьтесь в том, что Вы пользовались самой последней версией
694 ``ftputil``. Эта ошибка уже могла быть устранена.
695
696 Пожалуйста отправьте  отчёт об ошибке (на английском языке) на почтовый ящик  ``ftputil``
697 или вышлите его прямо мне (адрес электронного почтового ящика приведен в начале этого файла).
698 В *любом* случае Вы *не должны* включать конфиденциальную информацию
699 (логин пользователя, пароль, имена файлов, и т.п.) в Ваше письмо.
700
701
702 В сообщении об ошибке, пожалуйста, введите следующую информацию:
703
704 - версия ``ftputil``
705
706 - версия Python
707
708 - тип и версия  FTP сервера (отображается в "сообщении приветствия")
709
710 - операционные системы и их версии на сервере и клиенте
711   (выводятся при вводе командной строки ``uname -a`` на Unix)
712
713 - описание ошибки
714
715 - если возможно, то краткий пример кода, который приводит к ошибке
716
717 - если возможно, то идеи, которые бы помогли найти причину ошибки
718
719 Соединение по другому порту
720 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
721
722 По умолчанию, ``FTPHost`` объект соединяется по обычному  FTP порту.
723 Если Вы хотите использовать другой порт, то просмотрите раздел `FTPHost construction`_.
724
725 Вы можете использовать тот же самый подход  как при подключении в активном режиме,
726 так и при подключении в пассивном режиме, как Вам нравится.
727
728 Использование активных или пассивных подключений
729 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
730
731 Используйте оберточный класс для ``ftplib.FTP``, как описано в разделе
732 `FTPHost construction`_::
733
734     import ftplib
735
736     class ActiveFTPSession(ftplib.FTP):
737         def __init__(self, host, userid, password):
738             """
739             Act like ftplib.FTP's constructor but use active mode
740             explicitly.
741             """
742             ftplib.FTP.__init__(self)
743             self.connect(host, port)
744             self.login(userid, password)
745             # see http://docs.python.org/lib/ftp-objects.html
746             self.set_pasv(False)
747
748 Используйте этот класс как аргумент``session_factory`` в конструкторе``FTPHost``.
749
750
751 Условная отправка/загрузка с/на сервер(а) в различных часовых поясах
752 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
753
754 Вы можете заметить, что ``ftputil`` отправляет или загружает лишние файлы,
755 когда это не требуется. Это может случаться тогда, когда FTP сервер и клиент,
756 на котором запущена библиотека ``ftputil``, находятся в различных часовых поясах.
757 Смотрите раздел по установке `time shift`_.
758 Может быть, достаточно вызвать метод `synchronize_times`_.
759
760 Выдаются неправильные даты или время при выполнении  stat - методов на сервере
761 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
762
763 См. предыдущий и следующий советы.
764
765 Файл - связанные методы-запросы (например: listdir) возвращают неожиданные результаты
766 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
767
768 Если, например, ``listdir`` или ``lstat`` возвращают неправильное значение
769 или вызывают исключение, то это может происходить из-за неправильно
770 определенного формата каталога. См. `set_directory_format`_.
771
772 Я не нахожу ответ на мою проблему в этом документе
773 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
774
775 Пожалуйста, вышлите мне на электронный почтовый ящик Ваш вопрос, и я посмотрю,
776 что смогу для Вас сделать. :-) Вероятно лучший способ заключается в том,
777 чтобы выслать ваш вопрос по адресу  ftputil@codespeak.net;
778 потенциально, гораздо большее число людей сможет помочь Вам.
779
780 Ошибки и ограничения
781 --------------------
782
783 - ``ftputil`` нуждается в версии Python 2.0 или выше.
784
785 - При выполнении  ``lstat`` метода возвращается неправильное значение для корневого каталога
786   ``/``. Если Вы знаете как решить эту проблему, пожалуйста, сообщите мне.
787   Корневой каталог может использоваться в таких методах, соответственно:
788   ``FTPHost.path.exists/isfile/isdir/islink``,
789   хотя...
790
791 - Блокировка времени исполнения индивидуальных дочерних процессов.
792   Эта проблема возникает в том случае, если ``FTPHost`` объект, или
793   генерированные ``FTPFile`` объекты не используются в течение 10 минут и более.
794
795 - До сих пор, я не обращал внимание на безопасность потока.
796   В принципе, по крайней мере, различные ``FTPFile``
797   объекты должны работать в различных потоках.
798
799 - ``FTPFile`` объекты в текстовом режиме  *не поддерживают символы*
800   размером больше одного байта. Пожалуйста, отправьте мне письмо,
801   если вы работатете с мультибайтовыми потоками текста в ваших  FTP сеансах.
802
803 - В данной версии невозможно прервать процесс отправки и загрузки файлов.
804   Свяжитесь со мной, если у Вас возникли с этим проблемы.
805
806 - ``UserTuple`` класс в модуле  ``UserTuple.py``, пока полностью не проверен.
807   Если у вас возникла проблема при работе с этим классом, сообщите мне.
808
809 Файлы
810 -----
811
812 Если не изменены опции инсталляции, то ``ftputil`` файлы
813 будут размещены в `ftputil`` пакете. Документация (в
814 `reStructured Text`_ и в формате HTML ) находится в той же самой директории.
815
816 .. _`reStructured Text`: http://docutils.sourceforge.net/rst.html
817
818 Файлы ``_test_*.py`` и ``_mock_ftplib.py`` служат для тестирования модуля.
819 Если Вы  *используете* библиотеку ftputil (т.е. *не модифицируете* её),
820 Вы можете удалить эти файлы.
821
822 Справочники
823 -----------
824
825 - Mackinnon T, Freeman S, Craig P. 2000. `Endo-Testing:
826   Unit Testing with Mock Objects`_.
827
828 - Postel J, Reynolds J. 1985. `RFC 959 - File Transfer Protocol (FTP)`_.
829
830 - Van Rossum G, Drake Jr FL. 2003. `Python Library Reference`_.
831
832 .. _`Endo-Testing: Unit Testing with Mock Objects`:
833    http://www.connextra.com/aboutUs/mockobjects.pdf
834 .. _`RFC 959 - File Transfer Protocol (FTP)`: http://www.ietf.org/rfc/rfc959.txt
835 .. _`Python Library Reference`: http://www.python.org/doc/current/lib/lib.html
836
837 Автор
838 -----
839
840 Библиотека ``ftputil`` написана Стефаном Шварцером (Stefan Schwarzer)
841 <sschwarzer@sschwarzer.net>.
842
843 Обратная связь учтена. :-)
844
Note: See TracBrowser for help on using the browser.