Szkriptek: Python, Perl, Bash, ...

python-kérdés

Sziasztok.

Egy NMEA-checkert szeretmék pythonban, de paranoid módon, azaz minden lehetséges sentence-hibánál dobja az egész sort.
Eddig perlben és javascriptben tudtam megoldani ezt.

Levadásztam innen-onnan 2 kódot, ezeket egyberaktam, most így fest:


#!/usr/bin/env python

import re

""" Calculate  the checksum for NMEA sentence 
    from a GPS device. An NMEA sentence comprises
    a number of comma separated fields followed by
    a checksum (in hex) after a "*". An example
    of NMEA sentence with a correct checksum (of
    0x76) is:
    
      GPGSV,3,3,10,26,37,134,00,29,25,136,00*76"
"""

def check_nmea0183(s):
    """
    Check a string to see if it is a valid NMEA 0183 sentence
    """
    if s[0] != '$':
		print "nem jol kezdodik"

    if s[-4] != '*':
		print "nem jol vegzodik"
        

def checksum(sentence):

    """ Remove any newlines """
    if re.search("\n$", sentence):
        sentence = sentence[:-1]

    nmeadata,cksum = re.split('\*', sentence)

    calc_cksum = 0
    for s in nmeadata:
        calc_cksum ^= ord(s)

    """ Return the nmeadata, the checksum from
        sentence, and the calculated checksum
    """
    return nmeadata,'0x'+cksum,hex(calc_cksum)

if __name__=='__main__':

    """ NMEA sentence with checksum error (3rd field 
       should be 10 not 20)
    """
    line = "$GPGSV,3,3,20,26,37,134,00,20,25,136,00*58\n"


    check_nmea0183(line)
    
    """ Get NMEA data and checksums """

    data,cksum,calc_cksum = checksum(line)

    """ Verify checksum (will report checksum error) """ 
    if cksum != calc_cksum:
        print "Error in checksum for: %s" % (data)
        print "Checksums are %s and %s" % (cksum,calc_cksum)
    else:
     print "minden ok: ",(calc_cksum)

A kódban az
if s[-4] != '*':
sorban ezek szerint ha a mondat végén lévő \n jelet nézem, akkor azt a python egyetlen karakterként értelmezi.

Kérdés:
Ezt jól értem?

Python3 script furcsaság

Van egy egyszerű python3 scriptem a while ciklushoz, csak ennyi:

#!/usr/bin/env python3
while True:
s = input('Kérdés')

Elmentettem egy fájlba, amit futtathatóvá tettem.
Ha így futtatom:
python3 whilex.py akkor rendben lefut.
de ha így ./whilex.py akkor hibaüzenetet kapok, hogy nincs ilyen fájl vagy könyvtár.
Ez miért van? Egyszerűen nem értem mi a baja.

python --- kivételkezelés. IndexError és egyebek

Sziasztok.

Mark Summerfield Python3 c. remekműve előtt görnyedek és csak bámulok, hogy ezt a nyelvet miért nem a ZXSpektrumra találták ki régebben. Ezen kellett volna szocializálódnom.

Ha egy vagy több vezérlőszerkezetben semmiféle errorral nem akarom elszállítani a scriptemet, miket tehetek?

Jelenleg van egy while: -szerkezetem, amely indexhibával már nem száll el, mert beleraktam egy sort:


except IndexError:
 print('indexhiba, tovabb...')

Amint ezt beraktam a kódba, azóta ha egy sorban nem találja meg monjuk a 6. oszlopot, nem száll el, nem ír ki semmi hülyeséget csak a hibaüzenetet és veszi a következő sort.

-------
A kérdésem rövid.

Van még néhány error-lehetőség, mellyel még nem szállt el a python-script, de talán elszállhat.

EOFError
ValueError
KeyError
OSError
IOError

Ezek között talán a legutolsó érdekelhet még, ha esetleg már nem tud hova írni az adathordozóra a script.

Tehát ha abszolút paranoiásan nézem a dolgokat, hányféle errorkezelést érdemes beépíteni egy mezei scriptbe, amit nem akarok leállítani semmiképp se, hiszen folyamatosan kapja a feldolgozandó sorokat?

Elég az indexhiba és az IO-hiba?

[Megoldva] kisebb nagyobb feltétel - nem értem


#!/bin/bash
clear

echo 1 - 33
echo 2 - 34

if [[ 33 < 34 ]]; then
echo "az első szám a kisebb"
else
echo "A 2. szám a nagyobb"
fi
echo -e " \n \r"
echo 1 - 33.0.1990.58
echo 2 - 33.0.1990.115

if [[ 33.0.1990.58 < 33.0.1990.115 ]]; then
echo "az első szám a kisebb"
else
echo "A 2. szám a nagyobb"
fi

Az eredmény:
1 - 33
2 - 34
az első szám a kisebb

1 - 33.0.1990.58
2 - 33.0.1990.115
A 2. szám a nagyobb

Mind a kettő eredmény helyes, de ez így szvsz nem konzekvens. Miért nem egyformán írta ki hogy az első szám a kisebb?
Ez egy verzió ellenőrzéshez kell egy scriptben, s természetesen a nagyobb szám a jobb.

Tesztelőnek Python vagy Java

Sziasztok!

Sok év rendszergazdaság után (hardveres és Főleg Win, kevesebb Linuxx) 50+ useres cégnél, 40 felé közeledve nem szeretnék már asztal alatt bujkálni, és UTP kábeleket szerelni. Le is építettek a cégnél, van most munkám, de sajnos nem IT.
Közben megszereztem a Szoftver tesztelő (ISTQB) vizsgát és elkezdtem/elkezdenék programozást tanulni. 17-18 éve fősulin c-t és c++ -t tanultunk, de azóta nem sokat programoztam, legfeljebb php+html+css, a céges weblapok fejlesztésére, karbantartására. Persze nem kellene nulláról kezdeni, hogy mi a for ciklus, stb és az oop elveivel, módszerével is tisztában vagyok.

Szívesen elhelyezkednék tesztelőként, de nem tudom eldönteni, hogy melyik nyelvet tanuljam. A Pythonnal, vagy a Javaval tudnék jobban érvényesülni? Mi a véleményetek. Tudom, mindkettőt kellen, meg még vagy hármat, de egyszerre csak egyet szeretnék a munkám miatt.
Korábban 2 évet dolgoztam Kanadában, van még egy kis, azóta megkopott angol tudásom, ami feleleveníthető. Emiatt angol nyelvterületen is dolgoznék.

Vélemények?

Python objektum metódusok kezelése

Üdv!
Pythonban a dinamikus metódusok (tehát minden dekorátor nélküli, önreferenciával rendelkezők) lemásolódnak az objektumokkal együtt példányosításkor?
Tehát ha sok példány készül egy osztályról, akkor memória szempontjából hatékonyabb, ha a metódust kiveszem az osztályból és kívül definiálom? Vagy esetleg @staticmethod vagy @classmethod dekorátorral?
Köszi!

3 lehetőség

Mivel sajnos lassan 1 év eltelte után sem volt képes megoldani a Mandriva/Mageia/Rosa tárolók létrehozását a Vivaldi csapat, holott számtalanszor jeleztem már nekik a problémát, így készítenem kellet egy scriptet mely mindennap le ellenőrzi a csomagokat.
Eleddig simán működött is, de most belekerült a képbe a beta kifejezés, és ez most borította a scriptet annyiban, hogy hiába van meg a legfrissebb verziószám, a fájlnév megváltozott.
Jelenleg 3 lehetséges név közül választhatok.
vivaldi-beta
vivaldi-snapshot
vivaldi-preview

A script a verziószám ellenőrzésére alapul. A már telepített változat számát a $name-$name2 --version-nal kapom meg. Persze kell egy kis awk, mert nem csak simán a számot írja ki.

A behelyettesítés meg ezt dobja ki: vivaldi-snapshot-1.0.303.52-2.x86_64.rpm
Persze hogy nem jó.
Most egy subrutinnal megtudom mind a három legfrissebb csomag verzió számát. De itt elakadtam hogy azt hogy is érvényesítsem.
Tehát a subrutin eredményei a következők:

vivaldi-beta-1.0.303.52-2.x86_64.rpm
vivaldi-preview-1.0.219.50-1.x86_64.rpm
vivaldi-snapshot-1.0.303.48-1.x86_64.rpm

Most ebből kell megadnom hogy melyik települjön. A verziószám alapján a beta a legfrissebb.

Ha esetleg nem is így kéne kiindulnom, akkor itt a szerver és a szűrés:

name="vivaldi"
new_version=$(curl -ks https://repo.vivaldi.com/archive/rpm/x86_64/ | sed 's/.*href="//' | sed 's/".*//' | grep '^[a-zA-Z].*' | grep -v repodata | grep ${name}-${name2} | sort -r | head -n1

Próbálkoztam a fájlnév manipulálással ezen a módon: ${filename%%-*}" v1agy ${filename##--*} de ez nem jó.

Python evolúciós algoritmus párhuzamosítása

Sziasztok!

Írtam egy egyszerű evolúciós algoritmust, ami kb. így néz ki:
Populáció objektum egy lista típusú attribútumában sok Individual objektum van.
Populáció objektumnak van egy run() metódusa, ami levezényli a futást.

Szeretném a kódomat párhuzamosítani, hogy pl. minden processzormagon futtatni tudjak egy-egy populációt. Eddig még nem párhuzamosítottam, így valószínűleg infohiányos is vagyok.
A multiprocessing modullal próbálkoztam, írtam egy wrapper metódust, ami létrehozza a populáció objektumot és lefuttatja azt.
Létrehoztam a process-eket, minden process a wrappert hívja.

A kérdésem az, hogy egy ilyen populáció objektumot milyen shared memory object-tel tudnék kinyerni a subprocessekből miután lejárt a futás?

Köszi!