Язык python разработанный Гвидо ван Россум при всей своей простате синтаксиса обладает мощными возможностями. Поэтому находит активное применение как в науке, так и в повседневной работе с системой. Сегодня я хотел бы показать как вызывать приложения командной строки из python, для примера рассмотрим общеизвестную консольную утилиту wget. Эта утилита имеет следующий синтаксис вызова: wget [параметры ] [адрес]. Пример вызова:
wget http://www.google.ru , а если хотим сохранить закаченный материал в каком то другом месте то: wget -P /path/to/save http://www.google.ru Просто? А как это запрограммировать в python? Для определенности поставим задачу так: написать функцию, которая бы обеспечивала загрузку заданного файла либо в домашний, каталог, либо в заданный каталог. Фактически нам надо чтобы функция генерировала и передавала на исполнение командной оболочке в первом случае: wget url, а во втором: wget -P /path/to/save url. И здесь нам на помощь приходит модуль subprocess и его функция call(*popenargs, **kwargs) . Она позволяет вызвать приложение и передать ему набор аргументов в виде кортежа:
retcode=subprocess.call(["wget","www.site.com"]). в retcode идет код возврата от вызванной программы. В первом параметры передаем имя программы для вызова, а во втором параметр, при чем каждый из них идет как член списка. А вот собственно и код самой функции полностью:
import subprocess #импортируем модуль subprocess
def basic_download(key,url): # определяем функцию с двумя параметрами(первый содержит #ключи,а второй адрес)
if url=='': #если адрес пуст вернем ошибку
return -1
if key=='': # если параметр key не задан, вызываем wget с параметрами по умолчанию...
retcode=subprocess.call(["wget",url])
return retcode
else: #иначе
key='-P'+key #конкатенация ключа и пути сохранения
retcode=subprocess.call(["wget",key,url])
return retcode
Это базовый пример, но этот модуль предоставляет куда большие возможности, в чем можно убедится заглянув сюда
P.S. надеюсь хватит сил довести до полноценной GUI оболочки для wget
Комментариев нет:
Отправить комментарий