Пришло время немного поразвлечься. Воспользуемся этими сценариями для передачи и воспроизведения звукового файла с музыкальной темой Monty Python, находящегося на моем веб-сайте. Прежде всего, напишем модуль, представленный в примере 13.6, который загружает и воспроизводит файл.
Пример 13.6. PP4E\Internet\Ftp\sousa.py
#!/usr/local/bin/python """
Порядок использования: sousa.py. Загружает и проигрывает музыкальную тему Monty Python. В текущем виде может не работать в вашей системе: он требует, чтобы компьютер был подключен к Интернету, имелась учетная запись на сервере FTP, и использует аудиофильтры в Unix и плеер файлов .au в Windows. Настройте этот файл и файл playfile.py, как требуется.
from getpass import getpass
from PP4E.Internet.Ftp.getfile import getfile
from PP4E.System.Media.playfile import playfile
file = ‘sousa.au‘ # координаты по умолчанию файла
site = ‘ftp.rmi.net‘ # с музыкальной темой Monty Python dir = ‘.’
user = (‘lutz’, getpass(‘Pswd?’))
getfile(file, site, dir, user) # загрузить аудиофайл по FTP playfile(file) # передать его аудиоплееру
# import os
# os.system(‘getone.py sousa.au’) # эквивалент командной строки
В этом сценарии нет ничего нового, потому что он просто объединяет два инструмента, уже созданных нами. Мы повторно использовали здесь функцию getfile из примера 13.4 для загрузки файла и модуль playfile из главы 6 (пример 6.23) для проигрывания аудиофайла после его загрузки (вернитесь к тому примеру за дополнительными подробностями о том, как выполняется проигрывание). Обратите также внимание на две последние строки в этом файле — мы могли бы добиться того же эффекта, передав имя аудиофайла как аргумент командной строки нашему первоначальному сценарию, но этот путь менее прямой.
В текущем виде сценарий предполагает использование моей учетной записи на сервере FTP. Настройте сценарий на использование своей учетной записи (ранее этот файл можно было загрузить с анонимного FTP— сайта ftp.python.org, но он был закрыт из-за проблем с безопасностью между изданиями этой книги). После настройки этот сценарий будет работать на любом компьютере с Python, выходом в Интернет и зарегистрированным в системе аудиоплеером; он действует на моем ноутбуке с Windows и широкополосным соединением с Интернетом (если бы это было возможно, я вставил бы сюда гиперссылку на звуковой файл, чтобы показать, как он звучит):
C:\…\PP4E\Internet\Ftp> sousa.py
Pswd?
Downloading sousa.au
C:\…\PP4E\Internet\Ftp> sousa.py Pswd?
sousa.au already fetched
Модули getfile и putfile также могут использоваться для перемещения образца звукового файла. Оба они могут быть импортированы клиентами, желающими использовать их функции, или запущены как программы верхнего уровня, выполняющие самотестирование. Запустим их из командной строки и интерактивной оболочки и посмотрим, как они работают. При автономном выполнении в командной строке передаются параметры и используются настройки файла по умолчанию:
C:\…\PP4E\Internet\Ftp> putfile.py sousa.py ftp.rmi.net pswd?
Uploading sousa.py Upload done.
При импортировании параметры явно передаются функциям:
C:\…\PP4E\Internet\Ftp> python
>>> from getfile import getfile
>>> getfile(file=’sousa.au’,site=’ftp.rmi.net’, dir=’.’, user=(‘lutz’, ‘XXX’)) sousa.au already fetched
C:\…\PP4E\Internet\Ftp> del sousa.au
C:\…\PP4E\Internet\Ftp> python
>>> from getfile import getfile
>>> getfile(file=’sousa.au’,site=’ftp.rmi.net’, dir=’.’, user=(‘lutz’, ‘XXX’))
Downloading sousa.au Download done.
>>> from PP4E.System.Media.playfile import playfile
>>> playfile(‘sousa.au‘)
Хотя модуль Python ftplib сам автоматизирует работу с сокетами и форматирование сообщений FTP, тем не менее, наши собственные инструменты, подобные этим, могут упростить процесс еще больше.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011