суббота, 31 июля 2010 г.

Заметки о python в народном хозяйстве linuxoида: вызываем утилиты командной строки

Язык 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     
 Это базовый пример, но  этот модуль предоставляет куда большие возможности, в чем можно убедится заглянув сюда
Смело указывайте на ошибки и неточности, ведь я только начинаю свой путь в python. 
P.S. надеюсь хватит сил довести до полноценной GUI оболочки для wget           
     

Комментариев нет:

Отправить комментарий