Szkriptek: Python, Perl, Bash, ...

Végtelen ciklusú Perl script IO

Egy végtelen ciklusban futtatott perl-scipttel szeretnék külső eszköz állapotáról logot csinálni.
A gondom csak annyi, hogy eddigi tapasztalataim szerint a véges idő alatt lefutó scritpeknél is a változások futási idő alatt nem íródnak ki a fizikai tárra (a std outputon is csak a script lefutása után jelenik meg az összes kiírt adat), egy végtelen ciklusban futó script esetén ez alapvető probléma.
Jelenleg, ha végtelen ciklusban futtatom a programot, semmi nem jelenik meg a képernyőn, sem a fájlban, amibe az adatokat kiírnám, ha ctrl+c-vel megállítom, akkor az adatok elvesznek, az uzenetek sem érkeznek meg a std outputra.
Ez így kell, hogy legyen, vagy valamely módon kikényszeríthetem a fizikai adatmozgatást menet közben?
Kösz: Bálint

keresek : shell-ből email (.eml fájl) letöltés és "feltöltés" (küldés) távoli levelező szerverről-szerverre

(ha nem jó helyre raktam a témát kérlek javasoljatok, és igen, kerestem google-ön, de valószínűleg rossz kulcsszavakkal)

A megoldandó feladat:

- shell script-ből futtatható (opcionálisan se érdekel GUI, cron-os futtatás a cél)

- pop3 (vagy imap) és smtp távoli szerverekkel kapcsolódik

- új leveleket .eml fájlba letölti

- egy mappába rakott .eml fájlokat feltölti smtp-re (és kezeli a küldés sikerességét, sikeresség után shell script-et futtat, vagy másik mappába pakolja a fájlokat)

- 1 gmail-es címmel lesz használva, nem cél összetettebb profilkezelés

- jelszavakat biztonságosan kezeli (nem paraméterként kéri be futtatáskor)

(nem kell: olvasottsági visszajelzés, és egyéb eseménykezelés)

(opcionálisan: naplózik, vagy események után shell script-eket hív meg, pl. új email letöltésekor)

- - - - -

Szerk.:

- ha a letöltést és a feltöltést külön program végzi nem gond

- a feltöltés fontosabb, a letöltésre már most részben automatizálható a thunderbird

Hova tűnt az s2p és a2p a perl-ből?

Tegnap kellett volna valamihez, és legnagyobb meglepetésemre nincs ilyenem. Régebben a perl segédszoftver-készlet része volt az awk-to-perl meg sed-to-perl és hasonlók, most meg egyik sincs. Mikor és miért dobták ki ezeket? (Adott feladat nem volt túl nehéz, tehát átírtam én sk, de ezzel együtt is hiányzik.)

Mindezt Ubuntu 16.04-en néztem, amiben 5.22.x-es perl van, és most épp nem tudom egyében ellenőrizni.

Bash explode

Írtam egy kisebb scriptet, aminek az lenne a célja, hogy az adatok.txt-ből kinyerje az adatokat. Egy művelet körön belül 4db adat van, aztán jön a következő művelet kör. A művelet körök (;;) szeparátorral vannak elválasztva, így első körben az adathalmazt ezeknél kellene szétbontanom.

A helyett hogy eredményként ezt kapnám: t(**)teszt(**)tesztelek(**)teszteltem
Ezt kapom: t (csak egy 't' betűt)

Hol hibáztam?

scriptem.sh tartalma:

#!/bin/bash
BL=`cat adatok.txt`
IFS='(;;)' read -a arr <<< "$BL"
echo "${arr[0]}"

adatok.txt tartalma:

t(**)teszt(**)tesztelek(**)teszteltem(;;)p(**)proba(**)probalok(**)probak(;;)v(**)vala(**)valami(**)valamivalami

Python socket és while ciklus

Sziasztok,

Elakadtam és nem találom a választ sehol sem.

Van egy program ami egy socket-ről olvasná a parancsokat és eszerint a parncs szerint végrehajtana dolgokat.
Tehát az egész program egy 'while True' végtelen ciklusban fut. A ciklusban van olyan kód is, aminek folyamatosan (minden ciklusban) le kell futni egyszer

A baj ott kezdődik, hogy a socket olvasás megakasztja ezt a ciklust amíg nem kap valamit a socket-ről:


while True:
msg = usocket.recv(1024)
# ez itt nem fut le addig, míg a socketen nem történik valami.

Oké, utána olvastam, be kell állítani ezt:
socket.setblocking(0)

Ekkor viszont hibaüzenetet dob és elszáll a program.
Mondom nem baj, ha hibát dob, akkor lenyeljük és megyünk tovább, majd jön valami...

És akkor született ez:


while True:
try:
msg = usocket.recv(1024)
except:
pass
# ez itt már lefut, de csak egyszer (pedig while ciklusban van)

És ilyenkor hiba generálódik, belefut a hiba ágba, lefut a while ciklus többi része és utána nem indul őjra a ciklus, hanem kilép.

Miért? Ha egyszer a hibát elnyeltem, akkor miért nem indul újra a ciklus? Ha akkora hiba, akkor miért fut a többi kód tovább?
Lehet, hogy már nagyon késő van, de nem értem.
Tudna valaki segíteni?

Bash script - egy tagú stringek felismerése [megoldva]

Van egy ilyen formátumú szerzői listám:

Abdrafikova, A
Akhmadullina, R M
van der Meulen, R T
Van der Bruggen, C O
Spilt, J L és mtsai

Ebből szeretnék olyat, hogy az egy betűs tagok után legyen egy pont, azaz:

Abdrafikova, A.
Akhmadullina, R. M.
van der Meulen, R. T.
Van der Bruggen, C. O.
Spilt, J. L. és mtsai

Így próbáltam meghatározni, hogy csak az egy tagúak után legyen pont:
cat myfile | sed 's/\(\ [A-Za-záéíóöőúüű]\{1\}\)/\1./g'

De elcseszi a hollandokat - joggal:
van d.er M.eulen, R. T.
Van d.er B.ruggen, C. O.

Hogyan jelölhetem ki, hogy valóban csak az egyedül álló betűk után tegyen pontot?

[MEGOLDVA] megszabadulás a $_OUTDIR könyvtártól

Szervusztok!

Van egy exe-m, amit 7z-vel tömörítek ki. A 7z -y X paraméterekkel fut, és a kimenete egy $_OUTDIR könyvtárba kerül.
Ennek a könyvtárnak a tartalmát szeretném átmozgatni, de nem tudom. :( Segítsetek!
Már idáig jutottam:


#!/bin/bash -u
set -x

mkdir -p "/tmp/\$_OUTDIR"
cd "${_}"
echo "hello" > test.file
rm -rf "/tmp/target" > /dev/null
mkdir "/tmp/target"
cp -r "/tmp/\$_OUTDIR" "/tmp/target/"
ls -al "/tmp/target/"
rm -rf "/tmp/\$_OUTDIR"

Köszönöm előre is!
Üdv,
vfero

UPDATE:
~~~~~~~
A megoldás az lett, hogy:


8,9c8,9
< mkdir "/tmp/target"
< cp -r "/tmp/\$_OUTDIR" "/tmp/target/"
---
> # mkdir "/tmp/target"
> mv '/tmp/$_OUTDIR' "/tmp/target/"

Köszi +1x mindenkinek! ;)
vfero

Python globális változók és másik file-ban lévő függvények

Van egy adatszerkezetem (1 darab rekord).
A benne lévő adatokat szeretném függvényekből piszkálni.
Az átláthatóság miatt a függvényeket kitenném egy file-ba.Kb. ilyen a kód:


------------------------------------ main.py

from fgv import *

globálisVáltozó=5
fgv1() # kiírja: 5
fgv2() # bekér értéket
fgv1() # kiírja amit az előbb beírtunk (valszeg nem 5)

------------------------------------ fgv.py

def fgv1():
  print(globálisVáltozó)
  
def fgv2():
  globálisVáltozó=str(raw_input("GV? ")

A kérdés: miért van az, hogy ha a fenti módon szervezem a dolgokat, akkor elszáll az egész a francba:


Traceback (most recent call last):
  File "./main.py", line 13, in <module>
    fgv1()
  File "/bla/bla/bla/fgv.py", line 3, in fgv1
    print(globálisVáltozó)
NameError: global name 'globálisVáltozó' is not defined

Próbáltam guglizni, amit találtam nem volt releváns vagy nem értettem. :)
Úgy működik, hogy az fgv.py tartalmát berakom a main.py elejébe, de ez meg nem tetszik, mert böhöm nagy lesz végül a main.py.

Mi a helyes módszer?

Milyen eszközöket javasoltok GUI fejlesztéshez?

Kb. 16 éve nem programoztam semmit, és kb. 20 éve nem raktam össze GUI-t.

Most belekezdenék egy hobbi projektbe.

Valami olyan eszközkészletet keresek, amivel pythonban, Qt widgetekkel, Debian alatt minél fájdalommentesebben lehet valamit összerakni.
Első körben pár formot kell csak kitölteni, illetve kilistázni ilyen-olyan adatokat. Pár ablak, semmi nagyon különleges igény.
Bizonyára van egy csomó IDE, meg miegymás, arra lennék kíváncsi, mi az, ami nektek bejött már és a fentieket figyelembe véve talán nekem se lesz rossz.

képekből pdf

Sziasztok.

Régebben a converttel csináltam PDF-et képekbő, csak ugye elfelejtettem azóta.
Most van 1-1 könyvtáram, melyekben létrehozási dátumok szerint szeretném növekvő oldalszámokkal létrehozni a pdf-et, mintha mondjuk egy kézzel írt naplót digitalizálnék ily módon (tulajdonképpen az is).

A kérdésem, hogy ha a képeket a converttel 640x480-asra konvertálom, utána a jpg exif adataiból ki lehet-e olvastatni valamivel a keletkezési dátumot, hogy azzal csináljam a pdf-et, vagy tlbonyolítom a dolgaimat ismét?

Vagy létezhet egyszerűbb megoldás is a converten kívül?