Учимся ездить на Питоне, опыт освоения языка Python с нуля |
Поделиться |
Здравствуйте, гость ( Вход | Регистрация )
Учимся ездить на Питоне, опыт освоения языка Python с нуля |
Поделиться |
26.12.2011, 20:08
Сообщение
#91
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Почитай интересную статейку на эту тему , не далее как вчера чуть-чуть допиливал wmfon, очень помогла: http://asvetlov.blogspot.com/2011/03/subprocess.html Кстати обновленный wmfon в репе, теперь mirage открывается не с пустым окном, а с изображениями из /usr/share/design-current/backgrounds/ посредством команды : pr = subprocess.Popen(['/usr/share/wmfon/mirage','-R','/usr/share/design-current/backgrounds/'], shell=False) в твоем случае наверное: subprocess.call(['cd',' <некий каталог>'], shell=False) Прошёл по ссылке, но у меня не то : я как раз использую строку+shell=True или список+shell=False. Код >>> subprocess.call(['cd','~'], shell=False) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.6/subprocess.py", line 470, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.6/subprocess.py", line 623, in __init__ errread, errwrite) File "/usr/lib/python2.6/subprocess.py", line 1141, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory >>> subprocess.call(['cd ~'],shell=True) 0 >>> subprocess.call('pwd', shell=True) / 0 >>> В первом случае ошибка, во втором якобы ОК, а на деле каталог не меняется (Питон в данном случае запущен из / " Причём другие команды (какие запускал), кроме cd, работают ведь нормально. -------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
28.12.2011, 22:26
Сообщение
#92
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
to kostyalamer
Костя, ты никогда не пробовал организовать обмен данными между питоновским скриптом и и вызванным из него Xterm'ом? В манах и инете кое-что есть на эту тему, но применить почему-то не получается. Сначала что-то типа Код a = subprocess.Popen('xterm', shell = True, stdin = subprocess.PIPE, stdout=subprocess.PIPE) а потом хоть с communicate(), хоть без него - результата нет. То есть окошко Xterm появляется, но каких-либо признаков контакта его с моим скриптом не могу уловить То же самое, если Питон в интерактивном режиме - соединиться с Xterm и тогда не получается. -------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
29.12.2011, 6:45
Сообщение
#93
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
to kostyalamer Костя, ты никогда не пробовал организовать обмен данными между питоновским скриптом и и вызванным из него Xterm'ом? В манах и инете кое-что есть на эту тему, но применить почему-то не получается. Сначала что-то типа Код a = subprocess.Popen('xterm', shell = True, stdin = subprocess.PIPE, stdout=subprocess.PIPE) а потом хоть с communicate(), хоть без него - результата нет. То есть окошко Xterm появляется, но каких-либо признаков контакта его с моим скриптом не могу уловить То же самое, если Питон в интерактивном режиме - соединиться с Xterm и тогда не получается. Делал, правда это было давно: Код f = subprocess.Popen('mplayer -slave -quiet -input file=/tmp/mpinfile cdda://%s' %trk, shell = True, stdout = subprocess.PIPE, stdin = subprocess.PIPE ) print "1home info" n = f.stdout.readline(-1)#MPlayer 29766-4.4.1 (C) 2000-2009 MPlayer Tea print "1-"+ n n = f.stdout.readline(-1)#141 аудио & 305 видео кодеков print "2-"+ n n = f.stdout.readline(-1)#Terminal type `unknown' is not defined. print "3-"+ n n = f.stdout.readline(-1)#Пустая строка print "4-"+ n n = f.stdout.readline(-1)#Воспроизведение cdda://1. print "5-"+ n try: n = f.stdout.readline(-1)#Найден аудио CD с 19 дорожками. здесь ловить ошибку отсутствия диска ! архив с программой в прицепе, погляди там сам что к чему : wmcdplayer_1.0.tar.gz ( 3.83 килобайт ) Кол-во скачиваний: 1 |
|
|
21.1.2012, 18:06
Сообщение
#94
|
|
Мастер Группа: Пользователь Сообщений: 530 Регистрация: 22.8.2007 Вставить ник Цитата Пользователь №: 317 Страна: Россия Город: Не указан Пол: Муж. Репутация: 6 |
Кстати, на ютубе имеется видеокурс по освоению питона с нуля http://www.youtube.com/watch?v=jMg12k-v75g
А еще питон изучают в Сколково http://www.youtube.com/watch?v=5bh3NNYKO-0...feature=related Сообщение отредактировал and - 21.1.2012, 18:19 |
|
|
23.1.2012, 11:20
Сообщение
#95
|
|
Крупный специалист Группа: Пользователь Сообщений: 476 Регистрация: 30.11.2009 Вставить ник Цитата Пользователь №: 1722 Страна: Россия Город: Климовск/Московской Пол: Муж. Репутация: 6 |
А еще питон изучают в Сколково http://www.youtube.com/watch?v=5bh3NNYKO-0...feature=related Потому что хотят сделать кальку с MIT. |
|
|
2.9.2012, 22:10
Сообщение
#96
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Нашел хорошую инфу по Tkinter-у может кому-нибудь пригодится :
http://ru.wikiversity.org/wiki/%CA%F3%F0%F...FB%EA%E0_Python Сообщение отредактировал kostyalamer - 2.9.2012, 22:11 |
|
|
4.9.2012, 21:38
Сообщение
#97
|
|
Мастер Группа: Пользователь Сообщений: 530 Регистрация: 22.8.2007 Вставить ник Цитата Пользователь №: 317 Страна: Россия Город: Не указан Пол: Муж. Репутация: 6 |
Нашел хорошую инфу по Tkinter-у может кому-нибудь пригодится : Cпасибо, материал интересный. Все-таки жалко, что для tkintera не разработан простой конструктор форм в духе Gambas или visual бейсика. Page все таки немного не то, его код надо существенно править ручками. Еще наткнулся на проект для винды Visual Tkinter Python IDE http://sourceforge.net/projects/visualtkinter/ Судя по роликам с ютуба по задумке это самое то, но по исполнение похоже очень сырое. Официальный сайт не работает, для установки требуется dotnet, На моем компе оно не пошло, на работе половина работает, половина нет, например невозможно сменить имя кнопки - dotnet выбрасывает какой то exception. В общем, увы и ах |
|
|
4.4.2017, 23:05
Сообщение
#98
|
|
Мастер Группа: Активный Пользователь Сообщений: 542 Регистрация: 4.2.2016 Вставить ник Цитата Пользователь №: 2850 Страна: Россия Город: Не указан Пол: Муж. Репутация: 2 |
Перенесено из темы "Выбор IDE"
Долго ловил книгу на ОЗОНе. Поймал Теперь грызу Питон по книге
Прикрепленные файлы
|
|
|
5.4.2017, 21:11
Сообщение
#99
|
|
Мастер Группа: Активный Пользователь Сообщений: 542 Регистрация: 4.2.2016 Вставить ник Цитата Пользователь №: 2850 Страна: Россия Город: Не указан Пол: Муж. Репутация: 2 |
Пока не очень понял как работать с кнопками на форме... Тяжко в чужой программе сходу...
|
|
|
5.4.2017, 21:39
Сообщение
#100
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Пока не очень понял как работать с кнопками на форме... Тяжко в чужой программе сходу... Tkinter осваиваешь или PyQt ? Если tkinter , то вот хороший учебник : http://younglinux.info/tkinter.php , если Qt то это к Ивану |
|
|
7.4.2017, 13:39
Сообщение
#101
|
|
Мастер Группа: Активный Пользователь Сообщений: 542 Регистрация: 4.2.2016 Вставить ник Цитата Пользователь №: 2850 Страна: Россия Город: Не указан Пол: Муж. Репутация: 2 |
Я осваиваю то, что используется в ruleuser создаталем программы. Код там простой невизуальный который, но с кнопками я пока не знаю. Спасибо за ссылку!
Вроде исполльзуется gtk2 Сообщение отредактировал tema - 7.4.2017, 13:40 |
|
|
7.4.2017, 21:37
Сообщение
#102
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Пожалуйста , если gtk2 то вот хороший учебник по PyGTK :
http://pygtk.rosix.ru/%D1%83%D1%87%D0%B5%D...0%BA-pygtk-2-0/ |
|
|
11.4.2017, 1:55
Сообщение
#103
|
|
Мастер Группа: Активный Пользователь Сообщений: 542 Регистрация: 4.2.2016 Вставить ник Цитата Пользователь №: 2850 Страна: Россия Город: Не указан Пол: Муж. Репутация: 2 |
И ещё раз спасибо!
|
|
|
27.11.2020, 16:01
Сообщение
#104
|
|
Мастер Группа: Активный Пользователь Сообщений: 620 Регистрация: 11.5.2015 Вставить ник Цитата Пользователь №: 2810 Страна: Россия Город: Не указан Пол: Муж. Репутация: 4 |
На самоизоляции решил научиться питону, и появились некоторые вопросы.
Нужно из строки: kernel-image-std-def#1:5.4.68-alt1.1:p9+258798.40.5.2<>1601700122 Извлечь номер ядра то есть 5.4.68 Для этого я использую: Код re.findall(r'[0-9].[0-9].[0-9]{2}', x)[0] Под этот шаблон подходит только одно выражение, но findall выдает список 1 выражение то что мне надо и еще 3 небольшие куски типа p9+258798 из-за этого я использую [0] что бы направить в переменную только нужное, это костыль.х — это строка просто выше находится цикл for перебирающий список со строками. Я пытался использовать функцию поиска с права до 1-вого совпадения, но результат def#1:5. Почему это происходит не пойму. Для примера тип ядра извлекаю из строки так: Код re.findall(r'[a-z]{3}-[a-z]{3}') Просто и без всяких костылей, но для цифр это не работает так же хорошо, притом проблема именно с цифрами.============= Еще один вопрос, он скорее всего совершенно нубский. Есть команда: Код self.pushButton_DISTR.setDisabled(btn_off_on) В нее хотелось бы вставить переменную вместо DISTR Это прекрастно работает если в команде нет ссылки не экземпляр, но с ссылкой всегда выдает ошибку атрибута, видимо нужно как-то экранировать переменную, но как это сделать правильно пока не знаю. Для теста можно сделать любую команду ссылкой на экземпляр и попробовать воткнуть в ее строку переменную например заменив любую букву. |
|
|
27.11.2020, 16:58
Сообщение
#105
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Ничего не помню Конечно, если бы попрактиковаться сейчас в Питоне, то вспомнил бы, но такое в ближайшее время точно не светит
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
27.11.2020, 19:51
Сообщение
#106
|
|
Мастер Группа: Активный Пользователь Сообщений: 620 Регистрация: 11.5.2015 Вставить ник Цитата Пользователь №: 2810 Страна: Россия Город: Не указан Пол: Муж. Репутация: 4 |
Почитал повнимательнее ман, оказывается если в выводе stdout стоит флаг юникода то точки в регулярном выражении нужно экранировать иначе они интерпретируются как любой символ, а если нет флага то точка это точка.
Без экрана f = re.findall(r'[0-9].[0-9].[0-9]{2}', s) Код Переменная S kernel-image-std-def#1:5.4.68-alt1.1:p9+258798.40.5.2<>1601700122 Переменная F ['5.4.68', '9+2587', '5.2<>16', '017001'] То есть интерпретатор считает что я его прошу найти 0-9 ( цифру ) + ( любую фигню ) + 0-9 ( цифру ) + ( любую фигню ) + 0-9 ( 2 цифры ) С экраном f = re.findall(r'[0-9]\.[0-9]\.[0-9]{2}', s) Код Переменная S kernel-image-std-def#1:5.4.68-alt1.1:p9+258798.40.5.2<>1601700122 Переменная F ['5.4.68'] Самое прикольное что я знаю о необходимости экранировать точки в регулярках, но раз в мане было написано не надо, ну не спорить же с разработчиками языка, а у них оказывается семь пятниц на неделе всегда найдутся исключения. Сообщение отредактировал Koi.v2 - 27.11.2020, 20:04 |
|
|
28.11.2020, 17:16
Сообщение
#107
|
|
Мастер Группа: Активный Пользователь Сообщений: 620 Регистрация: 11.5.2015 Вставить ник Цитата Пользователь №: 2810 Страна: Россия Город: Не указан Пол: Муж. Репутация: 4 |
Конечный вариант более унифицирован.
Код def search_kernel(self): """Поиск ядра для обновления""" flavour = self.search_re(kernel_flavour=release()) real_number = self.search_re(kernel_num=release()) new_version = real_number search_version = run( f"apt-cache pkgnames kernel-image-{flavour}#", shell=True, stdout=PIPE, encoding='utf-8').stdout for x in search_version.splitlines(): act = self.search_re(kernel_num=x) if act > new_version: new_version = act self.compare_kernel(new_version, real_number) В self.compare_kernel переменные расходятся по разным функциям для частного применения, а в метод self.search_re выделил регулярки чтоб не калякать их каждый раз. Код def search_re(self, kernel_num='', kernel_flavour=''): """Извлечение номеров ядер и типа def""" search_num = re.compile(r'[2-9]\.[0-9]{1,2}\.?[0-9]{0,3}(?=-)') search_flavour = re.compile(r'[a-z]+-[def]{3}') if kernel_num: num_version = "".join(search_num.findall(kernel_num)) return num_version elif kernel_flavour: flavour_type = "".join(search_flavour.findall(kernel_flavour)) return flavour_type В результате код упростился, размер уменьшился, исчезли костыли. Кроме того в мане прочитал что оформление регулярки в compile предпочтительно когда к нему часто обращаются так как compile кэшируется и выполняется быстрее обычного метода. Тестил на списке: kernel-image-domU-std-def#1:5.4.68-alt1.1:p9+258798.40.5.2<>1601696113 kernel-image-old-def#1:4.19.128-alt2:p9+253518.100.2.1<>1592585800 kernel-image-std-def#1:5.4.68-alt1.1:p9+258798.40.5.2<>1601700122 kernel-image-un-def#1:5.7.19-alt1:p9+256869.100.1.1<>1598980297 kernel-image-domU-un-def#1:5.7.19-alt1:p9+256869.100.1.1<>1598544846 kernel-image-domU-old-def#1:4.19.128-alt2:p9+253518.100.2.1<>1592585511 И в резных вариантах release() Все отлично извлекается. |
|
|
Текстовая версия | Сейчас: 24.4.2024, 14:42 | |