Ironpython windows console что это

IronPython: что это за программа? Установка, настройка и описание

IronPython — это своего рода реплика языка программирования Python, а точнее , его реализация, которая тесно связана с .NET Framework. IronPython использует библиотеки .NET Framework и библиотеки Python. В целом это отличное дополнение к .NET, позволяющее веб-разработчикам «Питона» пользоваться возможностями .NET Framework. Это очень быстрый и выразительный способ программирования для выстраивания сценариев, тестирования и написания приложений с нуля.

Реализация IronPython происходит прямо поверх библиотек Dynamic Language Runtime (DLR), работающих поверх Common Language Infrastructure, которая , в свою очередь , отвечает за обеспеч ение динамической типизации, а также за отправку необходимых методов для используемого динамического языка.

DLR — это существенная часть .NET Framework 4.0 и Mono. Это стало возможным , уже начиная с релиза 2.4 2009 года. DLR также часто используется в качестве библиотек в наиболее « древних » реализациях CLI.

Характеристика IronPython по сравнению с CPython

Точные характеристики производительности IronPython, если сравнивать с CPython (это эталонная реализация языка программирования Python), будут зависеть от конкретного использования конкретного синтаксиса. В целом IronPython по производительности чуть хуже, чем CPython. Это доказано большим количеством тестов, сделанных с использованием скрипта PyStone.

IronPython в принципе может повысить свою производительность в программах на языке Python, которые используют потоки в несколько ядер , п отому что он сам использует JIT и не имеет Global Interpreter Lock (GIL) механизма. Этот механизм в основном используется в некоторых интерпретаторах программного языка, чтобы синхронизировать выполнение потоков. Интерпретатор, который использует GIL, всегда может выполнить только один поток за раз, даже если поток данных выполняется на многоядерном процессоре. Н екоторые популярные интерпретаторы с GIL — это CPython и Ruby MRI.

Установка Iron P ython

В целом установка Iron P ython — дело не хитрое. Будут небольшие различия в зависимости от того, какую операционную систему вы используете.

Установка Iron P ython в Linux

Установка Iron P ython в Linux довольно проста и умести тся в несколько простых шагов:

  1. Нужно добавить репозиторий Mono в вашу систему; для этого посетите сайт mono-project.com и выберете версию сво ей операционной системы.
  2. Установите Mono; это можно сделать в магазине приложений или в терминале , набрав: «$ sudo apt install mono-devel»;
  3. Установите Numerics; это также можно сделать через терминал: «$ sudo apt install libmono-system-numerics4.0-cil»;
  4. Наслаждайтесь работой, если все сделали правильно.

Установка Iron P ython MacOS

Здесь тоже все просто. Сама установка займет пару минут и всего несколько шагов:

  1. Перейдите на сайт mono-project.com и загрузите и установите последнюю версию Mono;
  2. Загрузите последнюю версию IronPython. Найдите ее через поиск, но , как правило , загрузка происходит из github.com;
  3. Откройте терминал и введите команду «$ which ipy»;
  4. Пользуйтесь и наслаждайтесь работой.

Установка IronPython в Windows

Здесь всего 2 шага отделяет вас от программирования на этом языке:

  1. Найдите и установите через поиск IronPython; как правило , скачать его можно с сайта github.com;
  2. Пользуйтесь и наслаждайтесь программированием .

Так что это за программа IronPython, для чего использовать?

Программа IronPython — это динамический язык. А как известно , динамические языки очень удобны, если необходимо, к примеру, быстро разработать приложение. Быстрая разработка — это , соответственно , быстрый результат , п оэтому современные разработчики все больше и больше отдают предпочтение именно динамическим языкам, так как они избавляют от старых методик и рутины, а значит , позволяют сосредоточит ь ся на творческой составляющей своего проекта.

Использовать или нет IronPyt h on — зависит только от вашего желания и необходимости конкретно в этом языке.

Если вам понравилась эта статья поделитесь ею с друзьями, тем самым вы помогаете нам развиваться и добавлять всё больше интересного и полезного контента!

IronPython

Сегодня поговорим об интересном проекте IronPython. Описание звучит так: «IronPython — это реализация языка программирования Python с открытым исходным кодом, которая тесно интегрирована с .NET Framework. IronPython может использовать библиотеки .NET Framework и Python, а другие языки .NET могут также легко использовать код Python».

Для начала установим все необходимое. Для работы с данным проектом нам понадобиться Visual Studio(я использую 2019, .Net Framework необходим не ниже 4.5, .Net Core 2.0 или 2.1). Установить можно через менеджер Nuget Install-Package IronPython Install-Package IronPython.StdLib. Текущая, на момент написания статьи, версия – 2.7.10.

Для начала создадим приложение Windows Forms и добавим туда все, что требуется:

В этот раз не будем пытаться решать сложных проблем, придумаем что-нибудь простое и одновременно показывающее взаимодействие Python и C#. Пусть нам необходимо сложить 2 числа (и мы по каким-то причинам не хотим делать эту операцию обыкновенным способом «в столбик» или с помощью калькулятора). Для этого добавим на нашу форму 3 TextBox-а, пару Label-ов и один Button. Должно получиться примерно так:

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

Определим две переменные:

Стоит отметить, что все, что будет взаимодействовать с IronPython, должно быть “public”.

Существует несколько методов для работы со скриптами в Ironpython:

Мне больше всего нравится способ ExecuteFile(), его и будем использовать. Для этого в метод инициализации формы добавим следующее:

Для того, чтобы выполнить какой-нибудь скрипт, добавим в код метода обработки кнопки следующий код:

В указанном выше коде выполняется построчно следующее:

  1. Исполняется файл по указанному адресу, в котором определена функция
  2. Функция из Python определяется в C#
  3. Вычисляется значение функции с учетом введенных значений
  4. В текстовое поле, предполагавшееся для ответа, записывается результат арифметической операциилибо ошибка, которая возникла при выполнении.
Читайте также:  Linux удалить удаленные файлы

Ну и сам Python-файл с функцией содержит код:

Проверим, как работает наш «вычислитель»:

Верно! У нас получилось написать простейшее приложение с применением этой технологии. Кажется, мы решили «детскую» задачку – написали простейший калькулятор, который умеет только складывать два числа. Но разве не с простых «детских» задач начинается изучение чего-то нового?! Лично для себя я вижу неплохую возможность в изучении с использованием уже знакомых мне инструментов. С помощью IronPython можно не только интерпретировать некоторый код, но и проводить некоторые параллели при изучении Python. К примеру, код на C#:

Будет эквивалентен следующему коду на IronPython:

Есть некоторое сходство, верно?!

Если в течение какого-то продолжительного времени вы писали .Net приложения традиционным способом (запись, компиляция, тестирование, исправление, перекомпиляция, повторное тестирование, все сначала) и по каким-то причинам столкнулись с необходимостью работы со скриптами (даже необязательно для анализа данных), то IronPython может стать своеобразным «мостом» для перехода к написанию скриптов Python и подарит возможность взглянуть на некоторые вещи под иным углом.

Поговорим про IronPython

Расскажем об интересном проекте IronPython. Описание звучит так: «IronPython — это реализация языка программирования Python с открытым исходным кодом, которая тесно интегрирована с .NET Framework. IronPython может использовать библиотеки .NET Framework и Python, а другие языки .NET могут также легко использовать код Python».

Для начала установим все необходимое. Для работы с данным проектом нам понадобиться Visual Studio (мы используем 2019,. Net Framework необходим не ниже 4.5,. Net Core 2.0 или 2.1). Установить можно через менеджер Nuget Install-Package IronPython Install-Package IronPython.StdLib. Текущая, на момент написания статьи, версия – 2.7.10.

Для начала создадим приложение Windows Forms и добавим туда все, что требуется:

В этот раз не будем пытаться решать сложных проблем, придумаем что-нибудь простое и одновременно показывающее взаимодействие Python и C#. Пусть нам необходимо сложить 2 числа (и мы по каким-то причинам не хотим делать эту операцию обыкновенным способом «в столбик» или с помощью калькулятора). Для этого добавим на нашу форму 3 TextBox-а, пару Label-ов и один Button. Должно получиться примерно так:

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

Определим две переменные:

Стоит отметить, что все, что будет взаимодействовать с IronPython, должно быть «public».

Существует несколько методов для работы со скриптами в Ironpython:

Нам больше всего нравится способ ExecuteFile(), его и будем использовать. Для этого в метод инициализации формы добавим следующее:

Для того, чтобы выполнить какой-нибудь скрипт, добавим в код метода обработки кнопки следующий код:

В указанном выше коде выполняется построчно следующее:

  • Исполняется файл по указанному адресу, в котором определена функция,
  • Функция из Python определяется в C#,
  • Вычисляется значение функции с учетом введенных значений,
  • В текстовое поле, предполагавшееся для ответа, записывается результат арифметической операции либо ошибка, которая возникла при выполнении.

Ну и сам Python-файл с функцией содержит код:

Проверим, как работает наш «вычислитель»:

Верно! У нас получилось написать простейшее приложение с применением этой технологии. Кажется, мы решили «детскую» задачку – написали простейший калькулятор, который умеет только складывать два числа. Но разве не с простых «детских» задач начинается изучение чего-то нового?!Это неплохая возможность в изучении с использованием уже знакомых инструментов. С помощью IronPython можно не только интерпретировать некоторый код, но и проводить некоторые параллели при изучении Python. К примеру, код на C#:

Будет эквивалентен следующему коду на IronPython:

Есть некоторое сходство, верно?!

Если в течение какого-то продолжительного времени вы писали .Net приложения традиционным способом (запись, компиляция, тестирование, исправление, перекомпиляция, повторное тестирование, все сначала) и по каким-то причинам столкнулись с необходимостью работы со скриптами (даже необязательно для анализа данных), то IronPython может стать своеобразным «мостом» для перехода к написанию скриптов Python и подарит возможность взглянуть на некоторые вещи под иным углом.

Ironpython windows console что это

Rohoss
Дата 17.6.2011, 18:20 (ссылка) | (нет голосов) Загрузка .

Начальник интернета

Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18

Профиль
Группа: Участник
Сообщений: 7
Регистрация: 6.12.2007

Репутация: нет
Всего: нет

если тебе нужно писать на .net учи c#
удобней VisualStudio для разработки под .net ничего нет, хотя любители mono не согласятся

ironpython просто способ работать с библиотеками .net под python

leshiy_AlisA
Дата 17.6.2011, 19:36 (ссылка) | (нет голосов) Загрузка .
Rohoss
Дата 17.6.2011, 20:24 (ссылка) | (нет голосов) Загрузка .

Начальник интернета

Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18

Цитата(leshiy_AlisA @ 17.6.2011, 19:36 )
если тебе нужно писать на .net учи c#

ну с# я как бе знаю

Цитата(leshiy_AlisA @ 17.6.2011, 19:36 )
ironpython просто способ работать с библиотеками .net под python
Stolzen
Дата 18.6.2011, 02:03 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 1
Всего: 48

Код на питоне лаконичнее, быстрее в написании и т.п. (Язык ведь скриптовый)
Поэтому смысл использования IronPython в том, что в нем есть возможность быстро писать на python, используя библиотеки .net и свой код, написанный на других языках платформы. Вроде бы это очевидно?

Добавлено через 59 секунд

Цитата(Rohoss @ 17.6.2011, 21:24 )
я думал может он предоставит мне некоторые возможности, которые трудно реализовывать в c#.
Rohoss
Дата 18.6.2011, 02:42 (ссылка) | (нет голосов) Загрузка .

Начальник интернета

Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18

Цитата(Stolzen @ 18.6.2011, 02:03 )
Поэтому смысл использования IronPython в том, что в нем есть возможность быстро писать на python, используя библиотеки .net и свой код, написанный на других языках платформы. Вроде бы это очевидно?

Нет, не очевидно. Я думал что кроме радости от того что я пишу на питоне должны быть ещё какие-то преимущества.

Цитата(Stolzen @ 18.6.2011, 02:03 )
Предоставит. Динамическая типизация, list comprehension, и прочие приятности.
Читайте также:  Проблемы со звуком windows 10 realtek high definition audio
Stolzen
Дата 18.6.2011, 13:13 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 1
Всего: 48

Rohoss, В принципе, я сходу не могу придумать пример, в котором python сильно выигрывает у C#, да и + реализация IronPython на .net может быть медленнее, чем C# (не знаю, как с IronPython, но вот с jython под jvm дела обстоят именно так — jython до 10 раз медленнее, чем java)

А почему вы задумались об использовании IronPython?

Rohoss
Дата 18.6.2011, 14:03 (ссылка) | (нет голосов) Загрузка .

Начальник интернета

Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18

Цитата(Stolzen @ 18.6.2011, 13:13 )
не знаю, как с IronPython, но вот с jython под jvm дела обстоят именно так — jython до 10 раз медленнее, чем java)

Это конечно жёстко.

Цитата(Stolzen @ 18.6.2011, 13:13 )
А почему вы задумались об использовании IronPython?
afiskon
Дата 18.6.2011, 14:44 (ссылка) | (нет голосов) Загрузка .

Опытный

Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4

Daevaorn
Дата 19.6.2011, 01:08 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70

Цитата(afiskon @ 18.6.2011, 15:44 )
Как минимум, за счет того, что код не интерпретируется, а компилируется/оптимизируется в байткод.
Skynin
Дата 19.6.2011, 19:00 (ссылка) | (нет голосов) Загрузка .

Опытный

Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: нет
Всего: 10

Цитата
Для каких задач может понадобится IronPython? . чем мне это поможет в разработке ПО на .нет?

Хорош для прототипирования
Когда удобно снабдить программу собственным скриптовым языком
В задачах где требуется гибкое конфигурирование программы
Для однорозавых задач

Цитата
Можно пример задачи, которую будет сложно решить на c# и где всё это понадобится?

Все задачи можно решать на ассемблере.

С C# и IronPython вопрос на самом деле звучит так:
Можно пример задачи, которую будет сложно решить на ЯП с статической типизацией и где вся эта динамическая типизация может понадобится?

И что такое «сложно», «трудно»?
Если ты опытен, то сложно — не будет и на ассемблере. А вот дооооолго, до полной потери мотивации писать — да.
То есть вопрос личной психологии — как долго можете писать программу не получая результата?
И — сколько времени выделено, и какое количество человек?

И программы обычно — эволюционируют. Как долго будет изменять/добавлять новый функционал в работающую программу?

Насчет скорости выполнения, не смущает что Web это обычно PHP и JavaScript?

А вот для EverNote и C# оказался медленным, и переписан был на С++.

И:
Если бы скорость выполнения программ была главным критерием, никаких языков на свете не было бы кроме ассемблера.
Хотя. может бы на С все развитие языков программирования остановилось бы.
Однако уже в конце 50ых появились LISP, Cobol и Algol. Хотя тогда компьютеры были совсем не быстрыми.

bilbobagginz
Дата 19.6.2011, 21:20 (ссылка) | (нет голосов) Загрузка .

Naughtius Maximus

Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 6
Всего: 317

Цитата(Rohoss @ 18.6.2011, 01:42 )
Можно пример задачи, которую будет сложно решить на c# и где всё это понадобится?
Цитата(Rohoss @ 18.6.2011, 13:03 )
Думал, может его использование чем-то упростит реализации задач какого-то типа.

очень просто (Актуально и для жабы): у тебя есть какой-то толстый мега проект
тебе надо его время от времени расширять.
проект настолько толст, что собирать, и деплоить его . убийство человекочасов.
или напр. он написан кем-то, и трогать его никому не хочется.

создаешь интерфейс (типа плагина) на сишарпе, просто какой-то абстрактный интерфейс.

теперь к этому интерфейсу можно подключаться на питоне:
в результате (если ограничения виртуального питона тебе не страшны), получаешь старый экзешник, и подключаешься к нему из питона, т.е. динамически расширяешь приложение, прозрачно для приложения.

если тебе это ничего не говорит, то . увы, не срослось.

Rohoss
Дата 19.6.2011, 21:28 (ссылка) | (нет голосов) Загрузка .

Начальник интернета

Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18

bilbobagginz, не совсем понял.
То есть делаешь расширяемое приложение? Но с такой задачей справляется скажем MEF, Unity и другие. В конце концов, если нужно именно делать плагины то в .нете есть для этого своя инфраструктура. Или я не совсем понял что ты имел ввиду.

Добавлено через 2 минуты и 57 секунд

Цитата(bilbobagginz @ 19.6.2011, 21:20 )
теперь к этому интерфейсу можно подключаться на питоне:
в результате (если ограничения виртуального питона тебе не страшны), получаешь старый экзешник, и подключаешься к нему из питона, т.е. динамически расширяешь приложение, прозрачно для приложения.
Skynin
Дата 20.6.2011, 13:38 (ссылка) | (нет голосов) Загрузка .

Опытный

Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: нет
Всего: 10

Цитата
В конце концов, если нужно именно делать плагины то в .нете есть для этого своя инфраструктура.
.
Подключаешься к интерфейсу на питоне, реализовываешь какую то логику отдельной либой и используешь эту либу в своём .ехе? Ну это же легко можно делать на C#

Мелкий оффтоп — когда появился С++ Сишники говорили так же — а зачем вот «это», когда легко можно сделать и на Си. Потом С++сники так говорили о Java еще и добавляя об убожестве ее возможностей.

Вернемся к Python’у. Зачем бодаться с инфраструктурой для плагинов если можно — не бодаться с ней?
Скажем в C# есть метаклассы? Нет. А благодаря их наличию в Python куча ОО паттернов, требующий парочку интерфейсов и парочку классов — преобразуются в простой код.
Можно динамически, во время выполнения изменять наследование реализации в C#? Нет, если заранее не понаписать инфраструктурного кода. И т.д.

это же легко можно — а если это же еще легче на Python’е? Опять же потому что не надо городить инфраструктуры.

На C#, кучу вещей нужно проектировать заранее. Закладывать возможности будущего функционала. А на Python’е хитрый функционал можно добавлять малым количеством кода в работающее ПО и без перекомпиляции зависящего кода.

Вообще, стоит на ночь прочесть книгу по Python’у. От Лутца или Саммерфилда. Тогда, если знаете C# многие вопросы — «это же легко сделать на C#» отпадут.
А возникнут — «а почему же тогда столько кода пишут на Java/C#»

Цитата
Тут тоже не совсем понял.
Читайте также:  Удаленная помощь windows 10 как отключить
Rohoss
Дата 20.6.2011, 16:27 (ссылка) | (нет голосов) Загрузка .

Начальник интернета

Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18

Цитата(Skynin @ 20.6.2011, 13:38 )
Мелкий оффтоп — когда появился С++ Сишники говорили так же — а зачем вот «это», когда легко можно сделать и на Си. Потом С++сники так говорили о Java еще и добавляя об убожестве ее возможностей.

Это не из той оперы

Цитата(Skynin @ 20.6.2011, 13:38 )
это же легко можно — а если это же еще легче на Python’е? Опять же потому что не надо городить инфраструктуры.

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

Цитата(Skynin @ 20.6.2011, 13:38 )
Начните изучать Python — поймете. Просто для саморазвития будет полезно знать, сколько лишнего кода приходится писать и самое главное — сопровождать на Java/C#
Цитата(Stolzen @ 18.6.2011, 02:03 )
Поэтому смысл использования IronPython в том, что в нем есть возможность быстро писать на python, используя библиотеки .net и свой код, написанный на других языках платформы. Вроде бы это очевидно?

Добавлено через 3 минуты и 28 секунд
Всё же есть много вещей, которых я не знаю и которые нужны, и которым можно будет выделить когда-то время для повышения своего проф. уровня. Вот мне и интересно, стоит ли того айронпайтон? И если стоит, то какой ему выделить приоритет?

Skynin
Дата 20.6.2011, 19:30 (ссылка) | (нет голосов) Загрузка .

Опытный

Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: нет
Всего: 10

Цитата
Вот был бы очень признателен, если бы мне продемонстрировали где айронпайтон удобней

На любую демонстрацию можно сказать: так я и на C# такое напишу.
Или — смысл фичи не очень очевиден.
За года в программировании убедился что такой настрой — ничем не перешибить.

Где удобно применять, уже сказал.

Писать код на C# и аналогичный на Python не вижу смысла. Можно посмотреть Computer Language Benchmarks Game: Python 3 — C# Mono
(а если вдруг взволнует эффективность выполнения то сразу сюда: C GNU gcc — C# Mono и сразу бросите этот C# и перейдете на Си )

Так же примеры-сравнения встречаются в книжках, и конечно — Гугле.

Цитата
А по поводу динамического изменения наследника

Понимаете. наличие такой фичи в языке говорит о существовании кучи других, менее ярких.
Если вам это и наличие метаклассов ни о чем не говорит, то большой вопрос — а вы знаете что такое объектно-ориентированная парадигма вообще, а не ее реализация в С#?

Цитата
в большом проекте проблем не оберешься.

Вы ПМ большого проекта? Или самостоятельно пишете большое приложение? Чем вызвано беспокойство, почему вас заботят не личные знания и навыки программиста, а сложности больших проектов?

Цитата
Вот мне и интересно, стоит ли того айронпайтон?

Не стоит, не изучайте. Отдохните, пива попейте.

Понимаете в чем заковыка — если человеку интересно, он берет и изучает. И никого не просит убедить его, что вот это интересно, это полезно, это нужно и т.д.
Хотя бы на хабре типа Заметки об объектной системе языка Python почитает.
А если встал в позу — на единственном языке что знаю это могу написать, то и правда — ему ничего не нужно изучать.

Вопрос не в том что можно написать — а еще раз — за какое время? Вы явно не понимаете о чем речь. Не понимаете что такое — время
Вот когда вы лично начнете писать в разы быстрее, используя IronPython, то абы ПМ не стал запрещать в силу непрограммиских требований к проекту.

Мое же глубокое ИМХО, профессиональный программист должен знать 4 ре языка разного типа (один из которых обычно будет его основным):
Низкоуровневый: ассемблер или Си
Императивно-ООПшный: С++, Java, C#
Функциональный: Lisp — Scheme, что-нить из MLсемейства(можно и F#), Erlang
С динамической типизацией: Smalltalk, Python, Ruby, Perl, . JavaScript, . (1C в конце концов )

Ваше нежелание узнать новое — это же ваши проблемы, верно?

Это сообщение отредактировал(а) Skynin — 20.6.2011, 19:37

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »

[ Время генерации скрипта: 0.2107 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Оцените статью