Szkriptek: Python, Perl, Bash, ...

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?

Ruby / eval / wrong number of arguments / require

Sziasztok,

Mikor Ruby kódot futtatok az eval() funkcióval (ez ugye szöveget értelmez Ruby kódként), akkor az eval() meghívása előtt defniálnom kell bizonyos require hívásokat az értelmezett kódból, de nem mindegyiket.

Azt most hagyjuk hogy miért akarom megetetni a kódot az eval()-lal.

Futtassuk az alábbi szöveget eval-lal:

eval "require 'resolv'; require 'json'; puts 5**5"

Habár ez nem ad hibát, és nem is tudom reprodukálni a saját kódomnál lévő problémát, általában némelyik require-t be kell tenni az eval futtatása elé. De nem mindegyiket.

(Az eredeti kódot nem adhatom ki, illetve hatalmas a kódbázis és nincs idő lenyomozni hogy milyen kombinációban nem adna hibát az eval.)

Ha viszont így futtatom, akkor jó:

require 'resolv'
eval "require 'resolv'; require 'json'; puts 5**5"

Körülbelül 15 require-t használok az eredeti kódban, és pont hogy beépítettekre dob hibát, nem pedig külső gem-ként telepítettre.

Vajon miért lehet ez? Miért kell bizonyos require-t (2-t a 15-ből) definiálnom az eval előtt és miért pont azt?

A hibaüzenet az eval() futtatásakor ez:
http://paste.ubuntu.com/23223835/

Egy másik kérdésem, amiből a fenti következik. Erre valakinek ötlet?

https://www.ruby-forum.com/topic/6879045

Nincs valami pipe megoldás, amivel a string-et úgy tudnám kiszolgálni mintha fájl lenne?

Köszi.