Keresés

Hirdetés

Új hozzászólás Aktív témák

  • cousin333

    addikt

    válasz atesss #30 üzenetére

    Python 2.6.2-et tedd fel, vagy régebbit, mert a 3-as verzió visszafelé nem kompatibilis.

    A Python meg interpretált nyelv, nem kell feltétlenül lefordítani...

    [ Szerkesztve ]

    "We spared no expense"

  • cousin333

    addikt

    válasz atesss #32 üzenetére

    "A fordítással a compile-ra gondoltam, exe-t gyártani a forrásból"

    Értem én, de mondom, hogy erre nincsen szükség, ha egyszer fenn van a Python futtatókörnyezet.

    "És milyen fejlesztőkörnyezetet tudnál ajánlani, aminek valamilyen jól használható, a Microsoft Visual C-hez hasonló kialakítású kezelőfelülete van ?"

    Igazság szerint nem ismerem különösebben a Visual C-t. Alapfokúbb dolgokhoz szerintem jó a "gyári" környezet, esetleg megtámogatva egy Notepad++-szerű alkalmazással. Komolyabbakhoz valóban rendelkezésre áll az említett Eclipse + PyDev. Működni működik, mert próbáltam, de nekem nincs rá szükségem.

    "De elöször akkor a python.org-ról a "Python 2.6.2 Windows installer (Windows binary -- does not include source) ", meg a Java Runtime enviroment kell, nem ?"

    Igen. A Java az alap Pythonhoz nem szükséges és szerintem az Eclipse is tartalmazza, ami neki kell.

    "Én csak ebből gondolom, hogy menne Windows XP-n is, egyébként nem értek a Pythonhoz."

    Letöltöd a win-es telepítőt és felteszed, onnantól kezdve mennie kellene, mert abban minden benne van, ami kell. A 3-assal azért nem volt jó, mert az visszafelé nem kompatibilis.

    [ Szerkesztve ]

    "We spared no expense"

  • sztanozs

    veterán

    válasz atesss #2742 üzenetére

    Én a helyedben sima mplayer-rel csinálnám (főleg, hogy nem kell gui/képernyő). Command line, és van windowsra is.

    JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

  • justmemory

    senior tag

    válasz atesss #2742 üzenetére

    +1 az mplayerre... Nekem is az jutott rögtön eszembe

    --- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

  • justmemory

    senior tag

    válasz atesss #2745 üzenetére

    Szia,

    mplayert tudsz indítani külön terminálablak nélkül is os.system() hívással is.

    [ Szerkesztve ]

    --- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

  • justmemory

    senior tag

    válasz atesss #2747 üzenetére

    A thread() szolgál arra, hogy egyszerre több szál fusson a progin belül - ha erre gondolsz, mint subprocess, akkor igen, úgy kellene indítani szerintem. Arról tudsz akár visszajelzést is kapni, ha leáll/lefut. Nem feltétlenül kell a process ID-t elmenteni, meghívhatod a pidof-ot (mint bash parancs); ezzel annyi gond van, hogy ha mondjuk több mplayer is fut egyszerre, akkor nehezen fogod tudni, hogy melyik melyik (csak mondjuk ha az indítás után rögtön futtatod a pidof-ot és kizárásos alapon eltárolod az azonosítót). De ennek ismeretében is, meg a thread kezelésénél is kvázi bármikor leállíthatod. Az, hogy éppen hol tart a lejátszásnál... Hát igen, nehezebben fogod tudni; annyira nem ástam bele magam, hogy van-e mplayer-hez esetleg python modul vagy simán bash-al ki lehet-e szedni belőle, hogy éppen hol tart. Ha utóbbit lehet, akkor elvileg arra is tudsz os.system hívást csinálni.

    [ Szerkesztve ]

    --- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

  • justmemory

    senior tag

    válasz atesss #2749 üzenetére

    "Nem feltétlenül kell a process ID-t elmenteni, meghívhatod a pidof-ot "
    Ami tulajdonképpen azt csinálja, nem ?

    De, igen... :)) Én arra gondoltam elsőre, hogy nem kell az elején elmenteni, mert utólag is le tudod kérdezni.

    Ami hátrány, hogy most kétszer íródik ki a PID a terminal-ban.

    Kíváncsiságból lefuttattam nálam is (2.7.3-as Python), csak annyit és csakis annyit ír ki a terminál, hogy A futo mplayer folyamatazonositoja: 17774. Tehát amit kell...

    --- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

  • justmemory

    senior tag

    válasz atesss #2751 üzenetére

    Nem tudom, hogy a rendszer különbözősége-e... én chroot-olt kali image-en futtattam... :)

    Bevallom, hogy nekem csak hobbi a (python) programozás; logolni nem szoktam... A threading kapcsán is a netet túrtam rengeteget anno...

    Lehet, hogy érdemes már az elején a 3-asra ráállni, hiszen a 2 támogatottsága megszűnt és lassan kivezetik.

    --- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

  • cog777

    senior tag

    válasz atesss #2751 üzenetére

    logging modulba meret alapu es ido alapu rotalo talalhato. Jol mukodnek. Ha kell tomorites, akkor hasznalhatod a gzip modult.

            logHandler = logging.handlers.RotatingFileHandler(filename, maxBytes=maxBytes, backupCount=backupCount)
          logHandler.rotator = self._rotating


      def _rotating(self, source, dest):
          f_in = open(source, 'rb')
            f_out = gzip.open(dest, 'wb')
            f_out.writelines(f_in)
            f_out.close()
            f_in.close()
            os.remove(source)

    [ Szerkesztve ]

    HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian

  • cog777

    senior tag

    válasz atesss #2755 üzenetére

    Szerintem a linux nem kozvetlenul irja az sd kartyat hanem bufferelve. Ha jol emlekszem - bar ezt a linux/rpi topicban kellene megkerdezni - 5 mpkent irja az ext4 az sdkartyat.
    Ha az nem jo, akkor ajanlanam a tmpfs-t v zramot es onnan rsync az sdkartyara neha.

    HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian

  • Silεncε

    őstag

    válasz atesss #2817 üzenetére

    {
    'A0': 0x40,
    'A1': 0x41,
    'A2': 0x42,
    'A3': 0x43
    }.get(channel_name)

    Sok magyarázatra szerintem nem szorul, egy dictionary-t csinálsz belőle és abból tudsz get-elni (ha meg nem valid értéket kap, a get None-al fog visszatérni

    [ Szerkesztve ]

  • cousin333

    addikt

    válasz atesss #2819 üzenetére

    A beírt formula helyes, egyszerűen kihagyta az értékadás részt (channel dictionary =), gondolván, hogy nem kell máshol ez az info.

    Gondolom már rájöttél, hogy kell az idézőjel. Én még talán kiegészíteném egy vizsgálattal és az egész olvasós részt betenném alá, valahogy így:

    def adc_measure(channel_name):
        channel_dictionary = {
            'A0': 0x40,
            'A1': 0x41,
            'A2': 0x42,
            'A3': 0x43,
        }

        if channel_name in channel_dictionary:
            ...
            bus.write_byte(I2C_address, channel_dictionary.get(channel_name))

    [ Szerkesztve ]

    "We spared no expense"

  • cousin333

    addikt

    válasz atesss #2827 üzenetére

    A mondás szerint akinek kalapácsa van, mindent szögnek néz... :)

    Ebben az esetben én nem használnám a dictionary-t, mert nem erre való. Az a baj vele ugyanis, hogy nem fix az elemek sorrendje - a pin kiosztásod viszont igen (bár létezik OrderedDict).

    Én a helyedben megismerkednék a NamedTuple típussal, illetve nem tudom, hogy hányas Python verziót használsz, de a 3.7-es verzió óta támogatott a DataClass is, ami hasonló céllal (is) készült. Ez utóbbi talán valamivel elegánsabb. Mindkettő a standard könyvtár része.

    from collections import namedtuple
    ...
    Ports = namedtuple('Ports', ['Switch1', 'Switch2', 'Switch3', 'Switch4',
    'Button1', 'Button2', 'NC7', 'NC8'])
    ...
    # i2c_io_readed_array: [True, True, True, True, False, True, False, False]
    port_state = Ports(*i2c_io_readed_array)  # figyelj a csillagra!

    Ilyenkor sorrendben rendeli hozzá az értékeket a címkékhez. Ezek után már egyszerűen tudsz hivatkozni a tömbre, vagy egyes elemeire, valahogy így:

    >>> port_state
    Ports(Switch1=True, Switch2=True, Switch3=True, Switch4=True, Button1=False, Button2=True, NC7=False, NC8=False)

    >>> port_state.Switch2
    True

    Ugyanez dataclass-al:

    from dataclasses import dataclass

    @dataclass
    class InputPorts:
        Switch1: bool
        Switch2: bool
        Switch3: bool
        Switch4: bool
        Button1: bool
        Button2: bool
        NC7: bool
        NC8: bool
    ...
    port_state = InputPorts(*i2c_io_readed_array)

    A használata kb. ugyanaz, mint a namedtuple-nek.

    [ Szerkesztve ]

    "We spared no expense"

  • cog777

    senior tag

    válasz atesss #2830 üzenetére

    En hasznalom a Micropythont otthoni projektjeimben.

    Ha jol tudom akkor a Python 3.5-re epul. Van par limitacio az esp8266/32-on. Az elobbi nem tamogajta a szalakat, utobbi nem tud vegtelen mennyisegben szalat kesziteni es eldobni. (Igy timer-t sem erdemes hasznalni) Egy ido utan (kb 1 nap alatt ha percenkent csinalsz szalat es dobsz el pl TCP kapcsolat lekezelesere akkor) nem kepes tobb szalat kesziteni. Valamit nem szabadit fel es betellik a (stack-je) pohara :D
    Erdemes inkabb perzisztens szal(ak)at kesziteni es hozzarendelni egy-egy feladatot.

    En elegedett vagyok a Micropythonnal ezeket a limitaciokat leszamitva. Pycharm-hoz allitolag van plugin is...
    Csinaltam egy homerseklet mero rendszert. Kertben, padlason, nappaliban helyeztem el szenzorokat es egy kijelzon jelenitem meg. Tervben van a webes grafikon megjelenito weblap + sms riasztas ha tul magas homersekletet mer a nappaliban. (Macsek miatt)

    Itt a RPi4/esp32/8266 "fejlesztoi laboromat" latod :D

    " Az Arduino-s topic elég jól pörög, nagyon sok hasznos dolog van, de ott MicroPython-ban valahogy nem nagyon láttam senkit se programozni (amúgy nem is értem miért, a C/C++ -hoz képest azért én elég sok előnyét látom így már kezdetnek is)."
    A kicsi Adruino Uno/Nano-n biztosan nem fut a Micropython, kell neki kb legalabb 80KB memoria.. mas verziokon mar gondolom elindul.

    "Vagy akár ajánlásokkal együtt (mi az amit ugyan használhatnánk Micropython/ESP alatt, de nem annyira ajánlott a viszonylag nagyobb memória vagy cpu igénye miatt)."
    Ez inkabb gyakorlatban jon elo. 8266-on max 20KB szabad memoria van, ami nem tul sok de egyszerubb feladatokra eleg, esp32-on viszont tobb 100 KB vagy meg tobb attol fuggoen hogy PSRAM-ramos verziod van-e. Igy memoria limitacio kevesbe problema.

    A GC-t neha erdemes letiltani ha pontosabb idozitest szeretnel egy-egy feladat kozben, es utana vegrehajtani.

    Ha valami kerdesed van, tedd fel nyugodtan, fel szememet a topicon tartom :)

    [ Szerkesztve ]

    HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian

  • cog777

    senior tag

    válasz atesss #2836 üzenetére

    igen, lehet monotonic-kal.

    HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian

  • cousin333

    addikt

    válasz atesss #2833 üzenetére

    A namedtuple egy "gyártó függvény" (factory function), aminek az eredménye ebben az esetben egy osztály lesz (mintha mondjuk nem kellene megírnod a Kör osztályt előre, hanem futás közben dinamikusan hoznád létre). Az i2c_io_pinout tehát lényegében egy osztály (amit talán elegánsabb lenne ennek megfelelően camel-case-el jelölni: pl. I2cIoPinout), az i2c_io_state meg valóban egy példány.

    Az adott számú "kulcsnevet" vagy az eredeti elnevezés tömbbel éred el, vagy a _fields paraméterrel. Pl.:

    i2c_io_state._fields[1]

    Őszintén szólva nem tudom, mire kell, de nekem az a véleményem, hogy ha ezt akarod elérni, akkor nem jól használod a típust, hiszen ez pont arra lenne jó, hogy ne kelljen ismerni a sorrendet a létrehozást követően.

    Alapvetően én az egész külső IC-nek egy osztályt hoznék létre, hasonlóan a már létező I2C, SPI... stb. osztályokhoz, ami aztán minden létező funkciót egy névtérbe "csomagol". Valami ilyesmi struktúrával:

    class IoModule(object):

        MASK_SWITCH1 = 0x30

        def __init__(self, interface):
            self.port = interface
          self.portA_status = None
          self.portB_status = None

        def connect(self):
            .... # connect here

        def close(self):
            self.port.close()

        def update_ports(self):
          self.portA_status = self.port.read(<reg_portA>)
    self.portB_status = self.port.read(<reg_portB>)

      def compare_portA(self):
            port_old = self.portA_status
            self.update_ports()
            port = self.portA_status

            return port & port_old

        @property
        def id(self):
            return self.port.read(<id_reg>)

        @property
        def Switch1(self):
            return True if self.port_status & self.MASK_SWITCH else False

    Ebben az esetben az osztályunk példányosításkor megkapja az interfészt (ami ebben az esetben egy I2C objektum), és azt használja a továbbiakban. A fenti kód elég kezdetleges, csak a struktúrát akartam megmutatni.

    ui: ha listaelemeken akarsz végigmenni, akkor ne használd a range(len(x)) formulát. Ha az elem kell, akkor

    for elem in lista:
        print(elem)

    Ha kell a sorszám is, akkor enumerate:

    for i, elem in enumerate(lista):
        print('Az', i, 'elem a(z)', elem)

    Ha pedig több egyforma listád van, akkor zip:

    for elemA, elemB in zip(listaA, listaB):
        print('Az A eleme:', elemA, 'a B eleme pedig:', elemB)

    [ Szerkesztve ]

    "We spared no expense"

Új hozzászólás Aktív témák