IPB

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V  « < 2 3 4  
Ответить в эту темуОткрыть новую тему
> Учимся ездить на Питоне, опыт освоения языка Python с нуля
Поделиться
ИВК
сообщение 26.12.2011, 20:08
Сообщение #91


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9985
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Цитата(kostyalamer @ 25.12.2011, 17:24) *
Почитай интересную статейку на эту тему , не далее как вчера чуть-чуть допиливал 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


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9985
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


to kostyalamer
Костя, ты никогда не пробовал организовать обмен данными между питоновским скриптом и и вызванным из него Xterm'ом? В манах и инете кое-что есть на эту тему, но применить почему-то не получается. Сначала что-то типа
Код
a = subprocess.Popen('xterm', shell = True, stdin = subprocess.PIPE, stdout=subprocess.PIPE)

а потом хоть с communicate(), хоть без него - результата нет. То есть окошко Xterm появляется, но каких-либо признаков контакта его с моим скриптом не могу уловить wink.gif То же самое, если Питон в интерактивном режиме - соединиться с Xterm и тогда не получается.


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 29.12.2011, 6:45
Сообщение #93


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Цитата(IVK @ 28.12.2011, 22:26) *
to kostyalamer
Костя, ты никогда не пробовал организовать обмен данными между питоновским скриптом и и вызванным из него Xterm'ом? В манах и инете кое-что есть на эту тему, но применить почему-то не получается. Сначала что-то типа
Код
a = subprocess.Popen('xterm', shell = True, stdin = subprocess.PIPE, stdout=subprocess.PIPE)

а потом хоть с communicate(), хоть без него - результата нет. То есть окошко Xterm появляется, но каких-либо признаков контакта его с моим скриптом не могу уловить wink.gif То же самое, если Питон в интерактивном режиме - соединиться с 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
and
сообщение 21.1.2012, 18:06
Сообщение #94


Мастер
******

Группа: Пользователь
Сообщений: 530
Регистрация: 22.8.2007
Вставить ник
Цитата
Пользователь №: 317
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 6


Кстати, на ютубе имеется видеокурс по освоению питона с нуля http://www.youtube.com/watch?v=jMg12k-v75g
А еще питон изучают в Сколково smile.gif http://www.youtube.com/watch?v=5bh3NNYKO-0...feature=related

Сообщение отредактировал and - 21.1.2012, 18:19
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Skull
сообщение 23.1.2012, 11:20
Сообщение #95


Крупный специалист
*****

Группа: Пользователь
Сообщений: 476
Регистрация: 30.11.2009
Вставить ник
Цитата
Пользователь №: 1722
Страна: Россия
Город: Климовск/Московской
Пол: Муж.



Репутация: 6


Цитата(and @ 21.1.2012, 17:06) *
А еще питон изучают в Сколково smile.gif http://www.youtube.com/watch?v=5bh3NNYKO-0...feature=related
Потому что хотят сделать кальку с MIT. smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 2.9.2012, 22:10
Сообщение #96


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Нашел хорошую инфу по Tkinter-у good.gif может кому-нибудь пригодится :
http://ru.wikiversity.org/wiki/%CA%F3%F0%F...FB%EA%E0_Python

Сообщение отредактировал kostyalamer - 2.9.2012, 22:11
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
and
сообщение 4.9.2012, 21:38
Сообщение #97


Мастер
******

Группа: Пользователь
Сообщений: 530
Регистрация: 22.8.2007
Вставить ник
Цитата
Пользователь №: 317
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 6


Цитата(kostyalamer @ 2.9.2012, 21:10) *
Нашел хорошую инфу по Tkinter-у good.gif может кому-нибудь пригодится :

Cпасибо, материал интересный.
Все-таки жалко, что для tkintera не разработан простой конструктор форм в духе Gambas или visual бейсика. Page все таки немного не то, его код надо существенно править ручками.
Еще наткнулся на проект для винды Visual Tkinter Python IDE http://sourceforge.net/projects/visualtkinter/ Судя по роликам с ютуба по задумке это самое то, но по исполнение похоже очень сырое. Официальный сайт не работает, для установки требуется dotnet, На моем компе оно не пошло, на работе половина работает, половина нет, например невозможно сменить имя кнопки - dotnet выбрасывает какой то exception. В общем, увы и ах dry.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
tema
сообщение 4.4.2017, 23:05
Сообщение #98


Мастер
******

Группа: Активный Пользователь
Сообщений: 542
Регистрация: 4.2.2016
Вставить ник
Цитата
Пользователь №: 2850
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 2


Перенесено из темы "Выбор IDE"

Долго ловил книгу на ОЗОНе. Поймал smile.gif
Теперь грызу Питон по книге smile.gif
Прикрепленные файлы
Прикрепленный файл  IMG_20170404_210429.jpg ( 2.73 мегабайт ) Кол-во скачиваний: 4
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
tema
сообщение 5.4.2017, 21:11
Сообщение #99


Мастер
******

Группа: Активный Пользователь
Сообщений: 542
Регистрация: 4.2.2016
Вставить ник
Цитата
Пользователь №: 2850
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 2


Пока не очень понял как работать с кнопками на форме... Тяжко в чужой программе сходу...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 5.4.2017, 21:39
Сообщение #100


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Цитата(tema @ 5.4.2017, 21:11) *
Пока не очень понял как работать с кнопками на форме... Тяжко в чужой программе сходу...

Tkinter осваиваешь или PyQt ? Если tkinter , то вот хороший учебник : http://younglinux.info/tkinter.php , если Qt то это к Ивану smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
tema
сообщение 7.4.2017, 13:39
Сообщение #101


Мастер
******

Группа: Активный Пользователь
Сообщений: 542
Регистрация: 4.2.2016
Вставить ник
Цитата
Пользователь №: 2850
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 2


Я осваиваю то, что используется в ruleuser создаталем программы. Код там простой невизуальный который, но с кнопками я пока не знаю. Спасибо за ссылку!
Вроде исполльзуется gtk2

Сообщение отредактировал tema - 7.4.2017, 13:40
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 7.4.2017, 21:37
Сообщение #102


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Пожалуйста smile.gif , если gtk2 то вот хороший учебник по PyGTK :
http://pygtk.rosix.ru/%D1%83%D1%87%D0%B5%D...0%BA-pygtk-2-0/
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
tema
сообщение 11.4.2017, 1:55
Сообщение #103


Мастер
******

Группа: Активный Пользователь
Сообщений: 542
Регистрация: 4.2.2016
Вставить ник
Цитата
Пользователь №: 2850
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 2


И ещё раз спасибо! smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Koi.v2
сообщение 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


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9985
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Ничего не помню sad.gif Конечно, если бы попрактиковаться сейчас в Питоне, то вспомнил бы, но такое в ближайшее время точно не светит mellow.gif


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Koi.v2
сообщение 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']


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

Сообщение отредактировал Koi.v2 - 27.11.2020, 20:04
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Koi.v2
сообщение 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()

Все отлично извлекается.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

4 страниц V  « < 2 3 4
Ответить в эту темуОткрыть новую тему
( Гостей: 1 )
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28.3.2024, 17:43