Чем плох systemd?
Интересует, почему все так не любят systemd, в этом плане мало опыта, хотелось бы реальные факты и недостатки узнать
Интересует, почему все так не любят systemd, в этом плане мало опыта, хотелось бы реальные факты и недостатки узнать
По сабжу, пока ничего не нарыл, максимум что юзал - vlc, gst
Проблема в том, что по окончанию трека в плеере, нужно воспроизводить следующий и соответственно менять статус кнопки проигрываемого трека.
Вот так треки добавляются с кнопками:
https://github.com/foozzi/yaudio/blob/master/src/yaudio.py#L141
Я делал так:
for s in self.vbox.children():
Вопрос состоит в том, как собственно выбрать следующую кнопку после имеющейся в переменной, к примеру через определенное время мне нужно что то сделать с кнопкой, идущей по порядку (добавлялись они все по порядку в цикле) в hbox.
Собственно как реализовать гиф анимацию в кнопке, например что бы осущствить вид загрущки чего либо. qtawesome пробовал, который font-awesome вставляет в кнопку, но с ним возникли проблемы.
Собственно написал первую более менее нужную тулзу, на pyqt5, пишу на этом всем месяц или полтора, хочу услышать критику и поправки которые мне следует учесть в дальнейшем написании кода.
https://github.com/foozzi/yaudio
Если закрыть крышку ноута и после открыть ее вновь, соостветсвенно выведя ноут из слип мода, выходит лишь черный экран с мерцающим курсором ввода текста, помогает перезагрузка.
def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape:
self.close()
elif e.key() == Qt.Key_Return:
self._search_music()
Собственно требуется что бы при нажатии на enter, так же проверялось имеет ли фокус qlineedit где введена поисковая фраза
Создаю плеер таким образом:
self.vlcInstance = vlc.Instance("--no-xlib --verbose 2")
self.player = self.vlcInstance.media_player_new()
self.player.set_mrl(<линк на стрим>)
self.player.play()
class Play(QtCore.QThread):
sig = QtCore.pyqtSignal(int, int)
def __init__(self, parent=None, *data):
super(Play, self).__init__(parent)
self.parent = parent
self.id = data[0]
self.parent.is_stop = False
self.sig.connect(self.parent.updateProgress)
self.playback = Streamer()
self.start()
def run(self):
uri = helpers.search.get_youtube_streams(self.id)
self.playback.play(uri['audio'])
def stop(self):
self.playback.stop()
self.exit()
return
import vlc
import requests
from PyQt5 import QtCore
class Streamer():
def __init__(self, *data):
self.vlcInstance = vlc.Instance("--no-xlib --verbose 2")
self.player = self.vlcInstance.media_player_new()
def stop(self):
self.player.stop()
return
def pause(self):
pass
def get_position(self):
return self.player.get_position()
def play(self, uri):
r = requests.get(uri)
if r.status_code == 200:
print('play')
self.player.set_mrl(uri)
self.player.play()
else:
return
3й день страданий и гуглений не дали пользы, либо я получаю ошибку сегментирования, либо i/o, либо вообще ошибку x server'а.
вот весь код тулзы:
https://github.com/foozzi/yaudio/blob/master/yaudio.py#L169
Подскажите, правильно ли я в цикле добавляю виджеты? Либо это может возникнуть из-за того, как я устроил поток?
Еще одно, как собственно такие дела дебагать? 3й день пишу на pygtk...
Есть ли что то подобное для python как например это - https://github.com/roecrew/menu ?
Пишу небольшой плеер, стримит аудио из youtube.
Сделал поток для проигрывания, но при переключении трека, пишет:
RuntimeError: threads can only be started once
Конечно, я мог бы использовать thread.join() для завершения потока, но при его использовании gui блочит... скорее всего я просто делаю что то не так.
Все ли правильно я использую в потоках? И как сделать это правильней и без ошибок?
main.py - https://pastebin.com/8fH0dreA
player.py - https://pastebin.com/xDLt64P2
Вот сэмпл
self.scrolled = Gtk.ScrolledWindow()
self.scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
for _ in vids:
attrs = helpers.search.get_video_attrs(_)
self.label_p = Gtk.Label(attrs['title'])
self.listhbox = Gtk.HBox()
self.vbox.pack_start(self.listhbox, False, False, 5)
self.button_p = Gtk.Button()
self.play_image = Gtk.Image.new_from_icon_name(
"gtk-media-play",
Gtk.IconSize.MENU
)
self.button_p.set_image(self.play_image)
self.button_p.connect("clicked", self.on_click_me_clicked, attrs['id'])
self.listhbox.pack_start(self.button_p, False, True, 2)
self.listhbox.pack_start(Gtk.HSeparator(), False, False, 2)
self.listhbox.pack_start(self.label_p, False, True, 2)
self.scrolled.add(self.listhbox)
Собственно сделал стрим плеер, впилил туда слайдер:
self.slider_update_signal_id = self.slider.connect(
"value-changed", self.on_slider_changed)
def on_slider_changed(self, range):
length = self.slider.get_value()
self.player.set_position(length / 100.0)
Пробовал довольно примитивно:
GObject.timeout_add(200, self.timing) # вызов после начала проигрывания плеера
и метод:
def timing(self):
length = self.player.get_position()
self.slider.set_value(length * 100.0)
return True
UPD: Еще пробовал с потоками:
thread = threading.Thread(target=self.timing)
thread.daemon = True
thread.start()
Не так давно осилил потоки в python, и тут встал вопрос. Например есть файл, который нужно перебирать построчно, в 5 потоков, каким образом мне дать понять 2,3... потокам, что 1 уже прогнал N строку и больше проходить по ней не нужно?
В данный момент разрабатываю одну тулзу, хочу для нее сделать конфиги кастомные (как например в robot framework для парсинга).
Кто то имел опыт в таком? Реально ли что лучше всего использовать только регулярные выражения?
Сабж. Инересует именно код, который мог бы парсить все страницы относящиеся к домену и статику для этих страниц (js,css)
Есть ли что то готовое?
Поставил на арч httpd, все ок, но буквально через 2 мин выполнил:
systemctl restart httpd.service
ОС: Manjaro
Пытался поставить cx_freezy:
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fPIC -I/usr/include/python3.6m -c source/bases/Console.c -o build/temp.linux-x86_64-3.6/source/bases/Console.o
creating build/lib.linux-x86_64-3.6/cx_Freeze/bases
gcc -pthread build/temp.linux-x86_64-3.6/source/bases/Console.o -L/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu -L/usr/lib -lpython3.6m -lpython3.6m -o build/lib.linux-x86_64-3.6/cx_Freeze/bases/Console -Xlinker -export-dynamic -lpthread -ldl -lutil -lm -s
lto1: критична помилка: bytecode stream generated with LTO version 5.1 instead of the expected 5.2
компіляцію перервано.
lto-wrapper: критична помилка: gcc returned 1 exit status
компіляцію перервано.
/usr/bin/ld: error: lto-wrapper failed
collect2: помилка: ld returned 1 exit status
error: command 'gcc' failed with exit status 1
----------------------------------------
Command "/home/foozzi/pymine/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-_mlqjdtj/cx-Freeze/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-bubxuy4y-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/foozzi/pymine/include/site/python3.6/cx-Freeze" failed with error code 1 in /tmp/pip-build-_mlqjdtj/cx-Freeze/
Есть хеш на base64, но при декоде получаю иероглифы: 87MEUOZ1A/SLNqgqyiGDwWw+Yk0=
В чем проблема и реально ли получить желаемое в хеше?
| ← назад | следующие → |