Перейти к содержимому

Как написать консольное приложение на python

  • автор:

Пишем инструменты командной строки на Python с помощью Click

Интерфейсы командной строки — эффективная вещь, так как они позволяют автоматизировать практически всё что угодно. Сегодня мы расскажем, как написать такой интерфейс на Python с помощью Click.

Обложка поста Пишем инструменты командной строки на Python с помощью Click

Python — невероятно гибкий язык программирования, который хорошо интегрируется с существующими программами. Немало Python-кода написано в виде скриптов и интерфейсов командной строки (CLI).

Инструменты и интерфейсы командной строки — эффективная вещь, так как они позволяют автоматизировать практически всё что угодно. Как следствие, эти интерфейсы с течением времени могут стать довольно сложными.

Обычно всё начинается с простого скрипта на Python, который что-то делает. Например, получает доступ к веб-API и выводит результат в консоль:

# print_user_agent.py import requests json = requests.get('http://httpbin.org/user-agent').json() print(json['user-agent']) 

Вы можете запустить этот скрипт с помощью команды python3 print_user_agent.py , и он выведет имя user-agent, использованного для вызова API.

Как и было сказано, довольно простой скрипт.

Но что делать, когда подобная программа растёт и становится всё более сложной?

Решением этого вопроса мы сегодня и займёмся. Вы узнаете об основах написания интерфейсов командной строки на Python и о том, как click позволяет упростить этот процесс.

Используя эти знания, мы шаг за шагом перейдём от простого скрипта к интерфейсу командной строки с аргументами, опциями и полезными инструкциями по использованию. Всё это мы сделаем с помощью библиотеки click.

К концу этой статьи вы будете знать:

  • Почему click — лучшая альтернатива argparse и optparse;
  • Как с его помощью создать простой CLI;
  • Как добавить обязательные аргументы командной строки в ваши скрипты;
  • Как парсить флаги и опции командной строки;
  • Как сделать ваши консольные приложения более удобными, добавив справочный текст.

Вы увидите, как сделать всё это с минимальным количеством шаблонного кода.

Примечание переводчика Код в данной статье написан на Python 3.6, работоспособность на более ранних версиях не гарантируется.

Зачем вам писать скрипты и инструменты для командной строки на Python?

Код выше — всего лишь пример, не очень полезный в реальной жизни. На самом деле скрипты бывают куда более сложные. Возможно, вы имели опыт с ними и знаете, что они могут быть важной частью нашей повседневной работы: некоторые скрипты остаются на протяжении всего времени жизни проекта, для которого они были написаны. Некоторые начинают приносить пользу другим командам или проектам. У них даже может расширяться функционал.

В этих случаях важно сделать скрипты более гибкими и настраиваемыми с помощью параметров командной строки. Они позволяют указать имя сервера, учётные данные или любую другую информацию скрипту.

Здесь приходят на выручку такие модули, как optparse и argparse, которые делают нашу жизнь на порядок проще. Но прежде чем мы с ними познакомимся, давайте разберёмся с терминологией.

Основы интерфейса командной строки

Интерфейс командной строки (CLI) начинается с имени исполняемого файла. Вы вводите имя в консоль и получаете доступ к главной точке входа скрипта, такого как pip.

В зависимости от сложности CLI обычно есть определённые параметры, которые вы можете передавать скрипту:

  1. Аргумент, который является обязательным параметром. Если его не передать, то CLI вернёт ошибку. Например, в следующей команде click является аргументом: pip install click .
  2. Опция — необязательный параметр, который объединяет имя и значение, например —cache-dir ./my-cache . Вы говорите CLI, что значение ./my-cache должно использоваться как директория для кэша.
  3. Флаг, который включает или выключает определённый сценарий. Вероятно, самым частым является —help . Вы только указываете имя, а CLI самостоятельно интерпретирует значение.

С более сложными CLI, такими как pip или Heroku CLI, вы получаете доступ к набору функций, которые собраны под главной точкой входа. Они обычно называются командами или подкомандами.

Возможно, вы уже использовали CLI, когда устанавливали Python-библиотеку с помощью команды pip install . Команда install говорит CLI, что вы хотите использовать функцию установки пакета, и даёт вам доступ к параметрам, характерным для этой функции.

Пакеты для работы с командной строкой, доступные в стандартной библиотеке Python 3.x

Добавление команд и параметров в ваши скрипты может сделать их значительно лучше, но парсить командную строку не так просто, как может показаться. Однако вместо того, чтобы пытаться самостоятельно решить эту проблему, лучше воспользоваться одним из многих пакетов, которые сделали это за вас.

Два наиболее известных пакета для этого — optparse и argparse. Они являются частью стандартной библиотеки Python и добавлены туда по принципу «всё включено».

По большей части они делают одно и то же и работают схожим образом. Главное отличие заключается в том, что optparse не используется начиная с Python 3.2, и argparse считается стандартом для создания CLI в Python.

Вы можете узнать о них больше в документации Python, но, чтобы иметь представление, как выглядит скрипт с argparse, посмотрите на пример ниже:

import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers)) 

click против argparse: лучшая альтернатива?

Вероятно, вы смотрите на этот код и думаете: «Что это всё значит?» И это является одной из проблем argparse: код с ним неинтуитивен и сложночитаем.

Поэтому вам может понравиться click.

Click решает ту же проблему, что и optparse и argparse, но немного иначе. Он использует декораторы, поэтому ваши команды должны быть функциями, которые можно обернуть этими декораторами.

С click легко создавать многофункциональный CLI с небольшим количеством кода. И этот код будет легко читаться, даже когда ваш CLI вырастет и станет более сложным.

Пишем простой CLI на Python с помощью click

Вдоволь поговорив о CLI и библиотеках, давайте взглянем на пример, чтобы понять, как написать простой CLI с click. Как и в первом примере, мы создаём простой CLI, который выводит результат в консоль. Это несложно:

# cli.py import click @click.command() def main(): print("I'm a beautiful CLI ✨") if __name__ == "__main__": main() 

Не пугайтесь последних двух строк: это то, как Python запускает функцию main при исполнении файла как скрипта.

Как вы видите, всё, что нам нужно сделать — создать функцию и добавить к ней декоратор @click.command() . Он превращает функцию в команду, которая является главной точкой входа нашего скрипта. Теперь вы можете запустить скрипт через командную строку и увидеть что-то вроде этого:

$ python3 cli.py I'm a beautiful CLI ✨ 

Что в click здорово, так это то, что мы получаем некоторые дополнительные возможности просто так. Мы не реализовывали справочную функцию, однако вы можете добавить флаг —help и увидеть базовое сообщение:

$ python3 cli.py --help Usage: cli.py [OPTIONS] Options: --help Show this message and exit. 

Более реалистичный пример CLI на Python с использованием click

Теперь, когда вы знаете, как click упрощает написание CLI, давайте взглянем на более реалистичный пример. Мы напишем программу, которая позволяет нам взаимодействовать с веб-API.

API, который мы дальше будем использовать, — OpenWeatherMap API. Он предоставляет информацию о текущей погоде, а также прогноз на пять дней для определённого местоположения. Мы начнём с тестового API, который возвращает текущую погоду для места.

Прежде чем мы начнём писать код, давайте познакомимся с API. Для этого можно использовать сервис HTTPie, включая онлайн-терминал.

Давайте посмотрим, что случится, когда мы обратимся к API с Лондоном в качестве местоположения:

$ http --body GET http://samples.openweathermap.org/data/2.5/weather \ q==London \ appid==b1b15e88fa797225412429c1c50c122a1 < "base": "stations", "clouds": < "all": 90 >, "cod": 200, "coord": < "lat": 51.51, "lon": -0.13 >, "dt": 1485789600, "id": 2643743, "main": < "humidity": 81, "pressure": 1012, "temp": 280.32, "temp_max": 281.15, "temp_min": 279.15 >, "name": "London", "sys": < "country": "GB", "id": 5091, "message": 0.0103, "sunrise": 1485762037, "sunset": 1485794875, "type": 1 >, "visibility": 10000, "weather": [ < "description": "light intensity drizzle", "icon": "09d", "id": 300, "main": "Drizzle" >], "wind": < "deg": 80, "speed": 4.1 >> 

Если вы смущены наличием API-ключа в примере сверху, не переживайте, это тестовый API-ключ, предоставляемый сервисом.

Более важное наблюдение заключается в том, что мы отправляем два параметра (обозначаемые == при использовании HTTPie), чтобы узнать текущую погоду:

  • q — место, в котором мы хотим узнать погоду;
  • appid — наш API-ключ.

Это позволяет нам создать простую реализацию на Python с использованием библиотеки requests (опустим обработку ошибок и неудачных запросов для простоты):

import requests SAMPLE_API_KEY = 'b1b15e88fa797225412429c1c50c122a1' def current_weather(location, api_key=SAMPLE_API_KEY): url = 'http://samples.openweathermap.org/data/2.5/weather' query_params = < 'q': location, 'appid': api_key, >response = requests.get(url, params=query_params) return response.json()['weather'][0]['description'] 

Эта функция делает простой запрос к API, используя два параметра. В качестве обязательного аргумента она принимает location (местоположение), которое должно быть строкой. Также мы можем указать API-ключ, передавая параметр api_key при вызове функции. Это необязательно, так как по умолчанию используется тестовый ключ.

И вот мы видим текущую погоду в Python REPL:

>>> current_weather('London') 'light intensity drizzle' # впрочем, ничего нового ? 

Парсим обязательные параметры с click

Простая функция current_weather позволяет нам создать CLI с местоположением, указанным пользователем. Это должно работать примерно так:

$ python3 cli.py London The weather in London right now: light intensity drizzle. 

Как вы, возможно, догадались, местоположение — это аргумент, поскольку оно является обязательным параметром для нашего погодного CLI.

Как нам сделать это при помощи click? Всё довольно просто, мы используем декоратор под названием argument . Кто бы мог подумать?

Давайте возьмём наш предыдущий пример и слегка изменим его, добавив аргумент location :

@click.command() @click.argument('location') def main(location): weather = current_weather(location) print(f"The weather in right now: .") 

Если этот print выглядит для вас странно, не волнуйтесь — это новый способ форматирования строк в Python 3.6+, который называется f-форматированием.

Как вы видите, всё, что нам нужно сделать, это добавить дополнительный декоратор к нашей функции main и дать ему имя. Click использует имя в качестве имени аргумента, переданного обёрнутой функции.

Примечание переводчика Имя аргумента, переданное click, должно совпадать с именем аргумента в объявлении функции.

В нашем случае значение аргумента командной строки location будет передано функции main в качестве аргумента location . Логично, не так ли?

Также вы можете использовать тире в именах, например api-key , которые click переведёт в snake case для имени аргумента в функции, например main(api_key) .

Реализация main просто использует нашу функцию current_weather для получения погоды в указанном месте. И затем мы с помощью print выводим полученную информацию.

Парсим опциональные параметры с click

Как вы, возможно, догадались, тестовый API ограничивает нас в возможностях. Поэтому, прежде чем мы продолжим, зарегистрируйтесь и получите настоящий API-ключ.

Первое, что нам нужно изменить, — URL, откуда берутся данные о текущей погоде. Это можно сделать, изменив значение переменной url в функции current_weather на URL, указанный в документации OpenWeatherMap:

def current_weather(location, api_key=SAMPLE_API_KEY): url = 'https://api.openweathermap.org/data/2.5/weather' # дальше всё остаётся как было . 

Это изменение приведёт к неработоспособности нашего CLI, так как указанный API-ключ не работает с реальным API. Поэтому давайте добавим новый параметр в наш CLI, который позволит нам указывать API-ключ. Но сначала мы должны решить, будет ли этот параметр аргументом или опцией. Мы сделаем его опцией, так как добавление параметра вроде —api-key делает его более явным и говорящим за себя.
Мы хотим, чтобы наша программа запускалась таким образом:

$ python3 cli.py --api-key London The weather in London right now: light intensity drizzle. 

Проще простого. Посмотрим, как добавить опцию к нашей существующей команде:

@click.command() @click.argument('location') @click.option('--api-key', '-a') def main(location, api_key): weather = current_weather(location, api_key) print(f"The weather in right now: .") 

И снова мы добавляем декоратор к нашей функции main . В этот раз мы используем декоратор с говорящим именем @click.option и указываем имя для нашей опции, начинающееся с двух тире. Как вы видите, мы также можем указать сокращение для нашей опции с одним тире, чтобы сэкономить пользователю немного времени.

Как было сказано ранее, click создаёт аргумент для передачи в функцию main из длинного варианта имени. В случае с опцией он убирает впередистоящие тире и переводит её в snake case. Таким образом, —api-key становится api_key .

Чтобы всё заработало, осталось лишь передать API-ключ в функцию current_weather .

Мы добавили возможность указывать свой собственный ключ и проверять погоду в любом месте:

$ python3 cli.py --api-key Canmore The weather in Canmore right now: broken clouds. 

Добавляем автоматически генерируемые инструкции по использованию

Можете себя похвалить, вы создали отличный небольшой CLI почти без шаблонного кода. Однако прежде чем вы решите отдохнуть, давайте убедимся, что новый пользователь будет знать, как пользоваться нашим CLI, путём добавления документации. Не бойтесь, всё будет просто.

Сначала давайте проверим, что выведет флаг —help после всех сделанных изменений. Довольно неплохо, учитывая что мы не приложили к этому никаких усилий:

$ python3 cli.py --help Usage: cli.py [OPTIONS] LOCATION Options: -a, --api-key TEXT --help Show this message and exit. 

Первое, что нужно исправить, это добавить описание для нашей опции с API-ключом. Всё, что нам для этого нужно сделать, — добавить справочный текст в декоратор @click.option :

@click.command() @click.argument('location') @click.option( '--api-key', '-a', help='your API key for the OpenWeatherMap API', ) def main(location, api_key): . 

Второе (и последнее), что мы сделаем, — добавим документацию для всей click-команды. Самый простой и самый питонический способ сделать это — добавить строку документации в нашу функцию main . Да, нам в любом случае нужно сделать это, поэтому это не лишняя работа:

. def main(location, api_key): """ A little weather tool that shows you the current weather in a LOCATION of your choice. Provide the city name and optionally a two-digit country code. Here are two examples: 1. London,UK 2. Canmore You need a valid API key from OpenWeatherMap for the tool to work. You can sign up for a free account at https://openweathermap.org/appid. """ . 

Сложив всё вместе, мы получаем хороший вывод для нашего инструмента:

$ python3 cli.py --help Usage: cli.py [OPTIONS] LOCATION A little weather tool that shows you the current weather in a LOCATION of your choice. Provide the city name and optionally a two-digit country code. Here are two examples: 1. London,UK 2. Canmore You need a valid API key from OpenWeatherMap for the tool to work. You can sign up for a free account at https://openweathermap.org/appid. Options: -a, --api-key TEXT your API key for the OpenWeatherMap API --help Show this message and exit. 

Подводим итоги

Итак, в этом уроке мы рассмотрели много всего. Можете гордиться собой, вы написали свой собственный CLI, и всё это с минимальным количеством шаблонного кода! Исходный код ниже доказывает это. Не стесняйтесь использовать его для собственных экспериментов:

import click import requests SAMPLE_API_KEY = 'b1b15e88fa797225412429c1c50c122a1' def current_weather(location, api_key=SAMPLE_API_KEY): url = 'https://api.openweathermap.org/data/2.5/weather' query_params = < 'q': location, 'appid': api_key, >response = requests.get(url, params=query_params) return response.json()['weather'][0]['description'] @click.command() @click.argument('location') @click.option( '--api-key', '-a', help='your API key for the OpenWeatherMap API', ) def main(location, api_key): """ A little weather tool that shows you the current weather in a LOCATION of your choice. Provide the city name and optionally a two-digit country code. Here are two examples: 1. London,UK 2. Canmore You need a valid API key from OpenWeatherMap for the tool to work. You can sign up for a free account at https://openweathermap.org/appid. """ weather = current_weather(location, api_key) print(f"The weather in right now: .") if __name__ == "__main__": main() 

Введение в создание приложений на Python

Python — это один из самых популярных языков программирования в мире. Он прост в изучении и использовании, и может быть использован для создания различных приложений, от консольных до веб-приложений и мобильных приложений.

Для начала работы с Python нужно установить интерпретатор Python и выбрать текстовый редактор или интегрированную среду разработки (IDE). Для создания приложений на Python необходимы также различные библиотеки и фреймворки, такие как Flask, Django, Tkinter, Kivy и др.

Чтобы научиться создавать мобильные приложения и зарабатывать на этом, приходите на наш бесплатный вебинар по разработке без кода. Вы сможете задать вопросы, узнать больше про зерокодинг и попробовать себя в новой профессии!

Создание консольного приложения на Python: простые шаги и лучшие практики

Консольное приложение — это приложение, которое запускается и выполняется в командной строке. Для создания консольного приложения на Python нужно создать файл с расширением .py и написать код в текстовом редакторе. В Python есть множество встроенных функций для работы с консолью, например, функции input() и print().

Для лучшей практики в разработке консольных приложений нужно следовать принципам DRY (Don’t Repeat Yourself) и KISS (Keep It Simple, Stupid). Это означает, что код должен быть читабельным и легко поддерживаемым.

Создание графического интерфейса пользователя с помощью библиотеки Tkinter

Tkinter — это стандартная библиотека для создания графического интерфейса пользователя (GUI) в Python. Она предоставляет набор виджетов и инструментов для создания интерактивных окон и диалоговых окон.

Для создания GUI на Tkinter нужно создать экземпляр класса Tk() и добавлять к нему различные виджеты, такие как кнопки, поля ввода и др. Также можно настраивать внешний вид и поведение виджетов с помощью атрибутов и методов.

Создание простого приложения на Python

Создание простого приложения на Python может быть легким и интересным заданием для начинающих разработчиков. Вот как можно создать простое приложение на Python:

Шаг 1: Создание нового файла Python

Начнем с создания нового файла Python. Откройте текстовый редактор или интегрированную среду разработки (IDE), такую как PyCharm или Visual Studio Code, и создайте новый файл с расширением «.py». Давайте назовем его «calculator.py».

Шаг 2: Написание кода приложения

Откройте файл «calculator.py» в выбранной вами IDE и добавьте следующий код:

def add_numbers(a, b):
return a + bnum1 = float(input(«Введите первое число: «))
num2 = float(input(«Введите второе число: «))result = add_numbers(num1, num2)
print(«Сумма чисел равна:», result)

В этом коде мы создаем функцию add_numbers , которая принимает два аргумента a и b и возвращает их сумму. Затем мы запрашиваем у пользователя ввод двух чисел, преобразуем их в числовой формат (используя float() ) и сохраняем их в переменные num1 и num2 . Далее мы вызываем функцию add_numbers с этими числами в качестве аргументов и сохраняем результат в переменной result . Наконец, мы выводим результат на экран.

Шаг 3: Запуск приложения

Сохраните файл «calculator.py» и запустите его. Вы можете выполнить это в своей IDE, нажав на кнопку «Запуск» или используя команду в терминале:

python calculator.py

Шаг 4: Тестирование приложения

После запуска приложение будет запрашивать у вас ввод двух чисел. Введите числа и нажмите Enter. После этого приложение выведет на экран сумму введенных чисел.

Вот пример работы приложения:

Введите первое число: 2.5 Введите второе число: 4.3 Сумма чисел равна: 6.8

Это пример работы приложения, где были введены числа 2.5 и 4.3, и программа вывела сумму 6.8.

Создание простого приложения на Python может быть занимательным и познавательным опытом для тех, кто хочет начать свой путь в программировании. Хорошее знание основных конструкций языка и навыки тестирования и отладки помогут вам создать качественное приложение на Python.

На Zerocoder.ru есть курс «Создание мобильных приложений без программирования», который позволяет создать мобильное приложение без необходимости знания Python или других языков программирования. В этом курсе вы узнаете, как создать простое мобильное приложение на платформах glide и adalo.

Практические вопросы по создания консольного приложения на Python

это обычные поля ввода данных. А как сделать в самом начале выбор языка, по типу «введите (1), если хотите начать на русском. Enter (2) if you want to continue in English». В самом начале ставить везде условный оператор if ? или есть другой способ?

Отслеживать
задан 9 мар 2022 в 18:18
33 6 6 бронзовых знаков
можно сделать вызов консольки с параметрами.
9 мар 2022 в 18:32
а можно поточнее рассказать об этом, по типу Python для самых маленьких 🙂
9 мар 2022 в 18:54
с примерами jenyay.net/Programming/Argparse
9 мар 2022 в 19:16

«интерфейс взаимодействия пользователя и ПО и как он называется?» ну вашему коду я бы назвал интерактивным интерфейсом, прога задает вопрос пользователь отвечает. Можно сделать типа сценария пишишь текстовой файл(мини ЯП) и скармливаешь своей проге. Если мне паметь не изменяет VMware может работать из командной строки тут даже батник можно замутить.

9 мар 2022 в 19:33

0

Сортировка: Сброс на вариант по умолчанию

Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.

  • python
  • ui
  • vmware

Консольное приложение PassKeep

А как Вы храните свои пароли? Или у Вас один пароль на все случаи жизни? Раньше у меня было именно так! Ну то есть почти так. У меня их было два — идентификационный код и хитро мудрая анаграмма, составленная из моего мобильного телефона.

Если Вы один из таких как я, то прошу под кат.

У меня уже давно созревала идея написать что-нибудь подобное. И вот, наконец-то, у меня выдался свободный день и я решил реализовать это дело.

План действий
  1. Программа должна сама генерировать пароль на основе url ресурса, на котором мы регистрируемся например;
  2. Пароль должен быть достаточно стойким к брутафорсу, то есть содержать буквы и цифры;
  3. Пароль не должен храниться где-либо, а генерироваться на лету;
  4. Пароль должен быть восстановимым.
  1. После запуска программы, требуется ввести пароль(он может быть простым, допустим 45678);
  2. Требуется ввести url, например www.twitter.com ;
  3. Получаем 10-значный пароль, который и используем для регистрации.
Как это работает?

После ввода пароля и url, мы получаем их md5-суммы, выполняем конкатенацию строк и получаем строку длинной 64 символа. Далее получаем md5-сумму этой строки и берем первые 10 символов — это и будет наш пароль. Довольно таки просто.

Реализация

Мне очень нравиться Python и JavaScript, но так, как мы хотим получить консольное приложение, а как запустить в консоли программу на JavaScripte я не знаю, то будем писать на Pythone. Начнем:

import hashlib, sys, re class PassKeep: #Да, это ООП, детка! __password = "" __length = 10 #Длина генерируемого пароля будет 10 символов. url = "" def getMd5(self, string): #Функция для получения md5 из строки. string = str(string) md5 = hashlib.md5() md5.update(string) return md5.hexdigest() def __init__(self): #Ага, даже конструктор есть. На всякий пожарный. Вдруг я поставлю пароль по умолчанию. self.__password = self.getMd5(self.__password) self.time = self.getMd5(time.time()) def setUrl(self, url): #Задаем url. self.url = self.getMd5(url) return self.url def setPasswd(self, passwd): #И пароль. self.__password = self.getMd5(passwd) return self.__password def decrypt(self): #Главная функция, она все декрупирует. password = self.__password #Получаем пароль и url, url = self.url #что бы удобнее было работать. result = self.getMd5(password + url) #И получаем md5 от результата конкатенации строк. passwd_candidate = result[:self.__length] #От результата откусываем нужные нам 10 символов. #А вот теперь начинаются извращения! После некоторого использования, #я понял, что есть вероятность того, что первые n(10) символов могут быть цифрами. #А пароль из одних цифр - это плохой пароль, поэтому надо проверять и что-то с этим делать! if (len(re.findall(r'([0-9]+)', passwd_candidate)[0]) + 3 < len(passwd_candidate)): #Не менее трёх букв return passwd_candidate else: #А если менее, то будем исправлять. result = "" count = 0 sum = 1 for symbol in passwd_candidate: #Получаем по одному символы и проверяем. if (sum < 4): #Если мы уже замени три цифры на буквы, то остальное просто добавляем. try: #Если символ не приводиться к int, то он str (кэп). int_symbol = int(symbol) if (count%2 != 0): #Будем преобразовывать только нечётные по счету цифры. print int_symbol result += chr(122 - int_symbol) #Заменим цифру на букву, которая находиться под тем же порядковым номером с конца алфавита, что б никто не догадался! sum += 1 count += 1 else: #Если четная, то пусть не меняется. result += symbol count += 1 except: #Если он str то мы его просто добавляем к результату. result += symbol count += 1 else: result += symbol count += 1 return result p = PassKeep() #Создаем объект. passwd = raw_input("Enter passwd \n") #У нас же консольное приложение как ни как! p.setPasswd(passwd) url = raw_input("Enter url, like www.example.com \n") p.setUrl(url) print p.decrypt() #Выводим все это безобразие на экран sys.exit(0) #и выходим. 
Запуск

Запустить это довольно просто — сохраняем все это дело в файл passkeep.py и запускаем:
python passkeep.py

Заключение

Вот этой вещью я пользуюсь уже почти 12 часов. Зарегистрировался на 5 ресурсах и на 2 поменял пароль. Изначально, пароли генировал на 64 разрядном процессоре, теперь попробовал на 86 разрядном, вроде бы пароли совпадают. Ну это я так, на всякий случай.

Ах, да. Я еще это дело залил на Github: клац.

Хочу еще немного по-тестировать все это дело и, если проблем не будет, портировать на iOS/Android/Chrome Extensions.

Буду очень рад конструктивным замечаниям по реализации.

Спасибо за внимание.

UPD:
Спасибо хабраюзеру Dark_MX за его дополнения и спасибо Romansl за то, что нашел расширение для хрома.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *