Oslavte vydání openSUSE Leap 16.1 s námi v Praze! Ve středu 4. listopadu 2026 (den po vydání Leapu 16.1) vás zveme na malou oslavu vydání openSUSE Leap 16.1 do pražské kanceláře SUSE. Připravili jsme pro vás dvě krátké přednášky: … více »
Dle plánu bylo PHP vydáno v nových verzích 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Opraveny jsou kritické zranitelnosti CVE-2026-109618 a CVE-2026-109619 aneb PHP2Shell.
UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-2.1 a 24.04-1.5. S opravou kritických zranitelností.
Společnost Škoda Auto zveřejnila na Printables bezplatné 3D modely příslušenství do svých vozů (držáky na nápoje, pomůcky pro vedení kabelů, mincovníky, háčky na USB kabely a čepice pro kapsy na zadních stranách opěradel sedadel, držáky na telefony a úchyty pro horní upevnění bezpečnostních pásů).
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 170 (pdf).
Dnes v 16:00 (14:00 UTC) budou opraveny 2 kritické zranitelnosti s CVSS 9.2 v PHP.
Nizozemská policie 13. října 2026 zabavila v datacentru Amsterdam Science Park server italského poskytovatele internetových služeb Autistici/Inventati (A/I), a to na základě americké žádosti o mezinárodní právní pomoc.… více »
Do 26. října do 18:00 běží na Steamu přehlídka nadcházejících her Festival Steam Next | říjen 2026 (YouTube) doplněná demoverzemi, přenosy a dalšími aktivitami. Demoverze lze hrát zdarma.
Čínská technologická společnost DeepSeek zveřejnila na GitHubu svůj framework DeepInfer, nástroj pro efektivní offline inferenci svého modelu DeepSeek-V4.1-Flash ve velkém měřítku. Software běží na Linuxu a nativně podporuje akcelerátory Nvidia ale i čipy Huawei Ascend 950. Jedná se pouze o samotný inferenční engine, ne kompletní produkční službu. Zdrojový kód je dostupný pod licencí Apache 2.0.
tail -f). Zkoušel jsem to přes fork a semafor, ale dostal jsem tip, že by se to mělo nějak dát udělat přes MainLoop() - to je koneckonců smyčka, která by měla zavolat určitou funkci kontrolující soubor.
Ale zatím jsem nenašel "obecný" postup, jak toho dosáhnout. Programátor nejsem, netuším, po čem vlastně pátrám.
Používám wxPython (ale postup asi bude obecný pro jaký koliv toolkit), část kódu:
class Monitor(wx.App):
def OnInit(self):
init GUI
[....]
def watcher(self):
if zmena_v_souboru:
zmena_v_gui
def main():
pymonitor = Monitor(0)
pymonitor.MainLoop()
main()
Jak na to?
Díky

#!/usr/bin/env python
import sys, os, select, fcntl, signal
SEEK_SET, SEEK_CUR, SEEK_END = 0, 1, 2
bufsize = 4096
def handler_SIGIO(a, b):
pass
def dump_to_end(fd):
while True:
chunk = os.read(fd, bufsize)
if not chunk: break
sys.stdout.write(chunk)
fd = os.open(sys.argv[1], os.O_RDONLY)
signal.signal(signal.SIGIO, handler_SIGIO)
filepos = 0
while True:
os.lseek(fd, filepos, SEEK_SET)
dump_to_end(fd)
filepos = os.lseek(fd, 0, SEEK_CUR)
print filepos
fcntl.fcntl(fd, fcntl.F_SETLEASE, fcntl.F_RDLCK)
signal.pause()
Dá se to udělat i jinak? Nevýhodou je to šaškování se signálem a volání pause()
, pokud si je explicitně neuděláš (třeba přes rouru). Není lepší použít vlákna?
#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk, gobject, stat, os, sys
class WatchFile:
def __init__(self, filename):
self.filename = filename
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect('delete_event', self.delete_event)
self.window.connect('destroy', self.quit)
self.checkbut = gtk.CheckButton('File "%s" has changed' %filename)
self.checkbut.show()
self.times = (None, None, None)
self.has_changed()
gobject.timeout_add(1000, self.periodic_check, None)
self.window.add(self.checkbut)
self.window.show()
def periodic_check(self, object):
if self.has_changed():
self.checkbut.set_active(1)
return True
def has_changed(self):
sr = os.lstat(self.filename)
t = (sr.st_atime, sr.st_mtime, sr.st_ctime)
if t != self.times:
self.times = t
return True
else:
return False
def delete_event(self, widget, data):
return False
def quit(self, widget, data = None):
gtk.main_quit()
def main(self):
gtk.main()
if __name__ == '__main__':
wtch = WatchFile(sys.argv[1])
wtch.main()
Tohle ukáže checkbox, který se automaticky zaškrtne při každé změně souboru. Odšktrnutí jsem ponechal na uživateli, ať si klikne myší. Každou sekundu to kontroluje všechny tři časy u souboru. Jádrem pudla je timeout_add, o kterém psal Petr Mach.
self.timer = wx.wxPyTimer(self.watcher)
self.timer.Start(1000)
self.watcher() # to je ta funkce, která to celé dělá
čerpal jsem z roota (cirkus s okny)
dík za nasměrování správným směrem.
Tiskni
Sdílej: