среда, 18 августа 2010 г.

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

Linux и командная строка это единое целое, командная строка это душа Linux. В ней можно ттворить чудесные вещи  в том числе и программно. Python программист имеет возможность активного взаимодействия с командной строкой Linux. Один пример  мы уже разобрали ранее, а теперь рассмотрим тот случай, когда сам скрипт вызывают из командной строки. Самое важное для нас здесь это разбор того что ввел пользователь. Python для этого предоставляет нам модуль sys и optget. Поэтому Америки я вам не открою, если скажу что начнем мы наш скрипт строчкой:
import sys,optget      
Модуль sys предоставляет нам структуру argv. Первый ее элемент мало интересен, это имя скрипта, а вот дальше пойдет компрамат на юзверя:) Но python этим не ограничивается, в нем есть интересная фича: name option, это и позволяет нам предложить пользователю написать не myprog 1 1 2, myprog --mode 1 --depth 1 --time 2 . A как все  это реализовать на практике?
Смотрим следующий скрипт:

import sys,getopt
def Test ():
    
 options,args=getopt.getopt(sys.argv[1:],' ', ['a=', 'b=', 'c=', 'd='])
 print options
 for option,value in options: 
    if option=='--a':
        print 'a=',value
    elif option=='--b':
        print 'b',value
    elif option=='--c':
        print 'c',value
    elif option=='--d':
        print 'd',value
               
Test()      
Что происходит? Объект getopt возвращает нам аргументы командной строки в виде списка двухэлементных кортежей, где первый элемент имя параметра, а второй его значение. А далее мы проходим циклом for по списку, и в две переменные считываем по два элемента из каждого кортежа, а при помощи оператора if ...elif предпринимаем необходимые действия. В переменную option считывается имя параметра, а в переменную value само значение. А что попадает в переменную args? Там находятся все значения командной строки, которые не имеют своего ключа. Удачи в использовании Python           



  

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

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