Szkriptek: Python, Perl, Bash, ...

perl mysql connect

Sziasztok,

Segitsetek kerlek. Belefutottam egy problemaba es nem ertem.
Irtam egy programot, amely azzal kezdi, h csatlakozik egy mysql adatbazishoz es azzal mindenfelet muvel. Tegnap teszteltem es rendben ment, ma reggel elesiteni akartam es a mysql csatlakozaskor elhasal, ez ment eddig rendben. A server nem frissult, program nem valtozott. A szukseges perl modulok DBI, DBD::mysql feltelpitve.

Ezt mondja amikor elszall:

install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (you may need to install the DBD::mysql module) (@INC contains: /usr/local/lib/perl5/site_perl/5.20.2/x86_64-linux /usr/local/lib/perl5/site_perl/5.20.2 /usr/local/lib/perl5/5.20.2/x86_64-linux /usr/local/lib/perl5/5.20.2 .) at (eval 6) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge.
at filedir.pl line 33.

Es itt a relevans program reszlet:

$dbh = DBI->connect('dbi:mysql:pureftpd','xxx','xxx') or die "Connection Error: $DBI::errstr\n";
$sql = "select `user` from `ftpd`";
$sth = $dbh->prepare($sql);
$sth->execute or die "SQL Error: $DBI::errstr\n";

Koszonom ha segitetek
Udv
sztupi

powershell 3d jagged tömb

Sziasztok!

A tárgyban szereplő dolgot szeretném megvalósítani, de nem megy. A 2d-s feltöltése így néz ki:


[System.Collections.ArrayList]$script:tdb=@()
$asd=@("nulla","egy","ketto","harom","negy","ot","hat","het","nyolc","kilenc","tiz")
$script:tdb+=,@()
for($x=0;$x -lt 10;$x++){
    $script:tdb+= ,@()
    $xdb="$x",$asd[$x]
    $script:tdb[$x]+=$xdb
    Write-Host $script:tdb[$x][0],";",$script:tdb[$x][1]
}

Ez működik, de van ezzel kapcsolatban is egy kérdésem. Miért nem működik ez:


    $script:tdb[$x]+=,@($x",$asd[$x])

A 3d-s feltöltésével így próbálkoztam, de nem jó:


[System.Collections.ArrayList]$script:tdb=@()
$asd=@("nulla","egy","ketto","harom","negy","ot","hat","het","nyolc","kilenc","tiz")
$script:tdb+=,@()
$y=0
for($x=0;$x -lt 4;$x++){
    $script:tdb[$y][$x]+=,@()
    $xdb="$x",$asd[$x]
    $script:tdb[$y][$x]+=$xdb
            [array]$ydb=$script:tdb[$y][$x]
            Write-Host $ydb[0], ";",$ydb[1]
    if(($x -eq 3) -and ($y -eq 0) ){
        $y++
        $x=0
    }
}

[formázás javítva]

awk: mező fájlba írása {megoldva}

Sziasztok.

Ádáz problémám támadt (ráadásul meg is fáztam miatta).

Van egy adatfolyam, ami egy /dev/ttyUSB0-ra kötött eszközről érkezik, minden másodpercben ilyen sorokat produkál:

$GPRMC, 135426.000, A, 5310.6108, N, 00833.4541, E, 0.98, 205.20, 270215,,,A*6A
$GPGGA, 135427.000, 5310.6105, N, 00833.4545, E, 1, 05, 1.6, 9.7, M, 46.4, M,,0000*5D
$GPGSA, A, 3, 05, 30, 15, 13, 28,,,,,,,,4.0, 1.6, 3.7*3F

(..igen, egy GPS antenna NMEA mondatai)

Ez az -F kapcsolóval át van adva az awk-nak, majd a sor elején RMC adatokat tartalmazó
sorokat szűri. Ezután teszek kísérletet azok feldolgozására, amit így végzek:

135427.000
helyett másodperc elhagyásával
1354-et iratok ki. Ez sikeres.

Ezután következne ezek fájlba vagy csővezetékre küldése egy másik szkriptnek, na ez nem megy.

Azt szeretnem elérni, hogy minden egyes file csak egy sort tartalmazzon, mindig az utolsó értekkel. Elméletileg a > jel awk-ban is a felülírás jele, a >> pedig a hozzáírásé. Valahogy nem akarja...

Így fest a script jelenleg:


awk -F, '/\$GPRMC/ \
{print substr($2, 1, 4)"UTC" > "utc"} \
{print $4$5 > "LAT"} \
{print $6$7 > "LON"} \
{print $8, $9, $3} \
' /dev/ttyUSB0

exit 0

Egy másik izgalmas kérdés az, hogy a /dev/ttyUSB0 egyszeri ovasása mellett hogyan lehetne megvalósítani azt, hogy mondjuk egy
/\$GPGGA/
sor eleji illesztés segítségével onnan is kiszedjek adatokat?

Gondoltam ezzel kapcsolatosan a tee-re, de az csak file-ba ír, arra kellene egy másik script, én meg minimálisan szeretném ezt megírni.

xchat irc event hook

Sziasztok!

Én is felfedeztem az IRC csodás világát, vagy 30 év csúszással, de jobb későn, mint soha :-)
Azt is észre vettem ám, hogy XCHAT alatt pompás python scripteket lehet írni, fokozva a hangulatot meg a felhasználói életérzést.

Tudom kezelni a hook-okat, nincs ezzel gond. Csak egy bánatom van, hogy azt az egy eseménynevet nem tudom, amikor az XCHAT alsó, üzenet sorába szöveget írok, na az vajon milyen esemény?

Nem tűnik "Chanel Message"-nek, sem "General Message"-nek. Most "/notice #channel message" xchat.command-dal oldom meg azt, hogy a beírt üzenet elé a rendszer egy időbélyeget tegyen, de nem tartom túl elegánsnak.

Nyilván nem egy IRC script tökéletes megírása teszi fel a pontot az életem főművére, de fél napot elszórakoztam vele, és már nagyon érdekelne a megoldás.

Tipp?

Üdv, Cözi

python {megoldva}

Sziasztok.

Életem első python-dolgait tanulom éppen és rájöttem, hogy ez bizony nem BASH.
Paraméternek mar át tudok adni stringet, és azt mar utána lehet kezelni. Most azt szeretnem, hogy fájlból olvasson és minden sort külön stringként kezeljen, külön névvel.

Eddig jutottam el:

root@logger:/usr/src/examples# cat olvasas.py
#!/bin/python
import sys,os
file='/logger'
job_id=os.path.join(file)
f=open(job_id,'r').readlines()
print f

root@logger:/usr/src/examples# cat /logger
2015febr7
root@logger:/usr/src/examples# python olvasas.py
['2015febr7\n']
root@logger:/usr/src/examples#

A problémám az, hogy amikor f-et kiírja, akkor azt így teszi:
['2015febr7\n']
és nem így:
2015febr7

Ez miért van?
Biztos valami őrületesen egyszerű dologról van szó...

[WORKED AROUND] Bash változó kiértékelése olvasáskor

Röviden a következőt szeretném megvalósítani:


$ A='foo=$B' #1
$ B=123      #2
$ echo $A    #3
foo=123
$

Meg tudom csinálni pl. printf-fel, de szeretném tudni van-e lehetőség arra, hogy #3 változatlan maradjon.

Kicsit hosszabb példa, csak hogy érthetőbb legyen mit szeretnék elérni:

hello.sh:


#!/bin/bash

# DON'T TOUCH THIS!

echo "$HELLO_MESSAGE"

Normál használat:


$ export HELLO_MESSAGE='Hello, World!'
$ hello.sh
Hello, World!
$

Amit én szeretnék látni:


$ export HELLO_MESSAGE='Hello, $WHO!'
$ WHO='HUP' hello.sh
Hello, HUP!
$

[MEGOLDVA]bash túlcsordulás??

hello

adott egy lista:
http://pastebin.com/BQe0794y

amit ilyen formába kell átalakítanom:
------
shared-mime-info-0.70-6.el6.x86_64
sudo-1.8.6p3-15.el6.x86_64
sysstat-9.0.4-27.el6.x86_64
system-config-firewall-base-1.2.27-7.2.el6_6.x86_64
tar-2:1.23-11.0.1.el6.x86_64
tzdata-2014j-1.el6.x86_64
udev-147-2.57.0.2.el6.x86_64
util-linux-ng-2.17.2-12.18.0.1
-------

a használt tool pedig bash és sed. A gond az h úgy néz ki, mint ha valami belső buffer telítődne és nem a fork már nem bír többet.
a script pedig:

sed -e 's/\.x86_64\|.noarch/-/g' -e 's/[ ]\{1,\}//g' $file-$date-input| \
sed -e 's/public_ol6_latest/.x86_64/g' -e 's/uekpublic_ol6_UEK_latest/uek.x86_64/g' -e 's/el6ius/el6.x86_64/g' | \
sed -e :a -e N -e 's/el6\n/el6/g' | \
sed -e :a -e N -e 's/ent-data-\n/ent-data-/' > $file

a kimenet pedig:
....

....
device-mapper-libs-1.02.90-2.el6_6.1.x86_64
device-mapper-persistent-data-
0.3.2-1.el6.x86_64
dhclient-12:4.1.1-43.P1.0.1.el6_6.1.x86_64
....
xorg-x11-drv-ati-firmware-7.3.99-2.el6.x86_64
xz-4.999.9-0.5.beta.20091007git.el6
.x86_64
xz-libs-4.999.9-0.5.beta.20091007git.el6
.x86_64
xz-lzma-compat-4.999.9-0.5.beta.20091007git.el6
.x86_64
yum-3.2.29-60.0.1.el6.x86_64

és ez így nem jó. mindehol szépen betudja formázni és össze kapcsolja a sorokat de az utolsó két parancs az nem megy neki.

viszont ha külön ki greppelem ezeket a részeket, a scriptben lévő sed parancs tökéletesen beformázza a sorokat.

tudja valaki hogy mi lehet a baj és hogy lehet megoldni?
próbáltam már fáljba írni, sleepeltetni, cat-ni, de egyik sem segít. mindig ugyan az. mintha a bash child nem tudna több sed parancsot kezelni.
azért gondolom h bash és nem sed, mert amikor kiíratom fáljba akkor ott a sed-nek meg kéne állnia és törlődni a memóriából, majd később újrahívva ismét betöltődni. de javítsatok kérlek ha tévedek.

nos végülis is a script a következő lett:

date=$(date +%Y_%m_%d)
file=/root/list-of-updates
yum check-update > $file-$date
sed -i -e "1,2 d" $file-$date

version=`awk '{sub(/\.(x86_64|noarch)$/, ("-" $2 "&"), $1); print $1}' $file-$date |grep -v public|grep -E '^[0-9]'|awk -F'.el6' '{print $1}'`
awk '{sub(/\.(x86_64|noarch)$/, ("-" $2 "&"), $1); print $1}' $file-$date |grep -v public|grep -vE '^[0-9]'| sed -e "s/ent-data-/ent-data-$version/" > $file-$date-$$

cat $file-$date-$$

akit érdekel a fő probléma az volt h míg a 'yum check-update' kimenete sortörés nélküli mert kifér a képernyőre addig az átirányított kimenet már a default kőkorból megmaradt consol méreteket vette alapul ezért tördelte be a sorokat.
tudom, a két parancs kétszer parzolja végig a fájlt de mivel nem 100M beszélünk mind1 is.

perl mysql kapcsolat

Sziasztok,

Elakadtam és segítséget kérnék!

Perl script mysql db csatlakozás, ezt írja hibaként:

"
install_driver(mysql) failed: Can't locate loadable object for module DBD::mysql in @INC (@INC contains: /usr/local/lib/perl5/site_perl/5.20.1/x86_64-linux /usr/local/lib/perl5/site_perl/5.20.1 /usr/local/lib/perl5/5.20.1/x86_64-linux /usr/local/lib/perl5/5.20.1 . /usr/local/lib/perl5/site_perl/5.20.1/x86_64-linux/mysql.pm) at (eval 6) line 3.
Compilation failed in require at (eval 6) line 3.
Perhaps a module that DBD::mysql requires hasn't been fully installed
"
DBD modul, feltelepítve és a @INC : mappákba belinkeltem a mysql.pm-t.

Mit rontok megint el ? Segítsetek !

Köszönöm
lelkész

[megoldva] Python Thread queue hogyan

Sziasztok!

A kovetkezo problemam van: Komunikacio szalak kozott queue-val. Valami ilyesmit probalok megvalositani (a kod sokkal hosszabb es osszetettebb, szoval megprobaltam, csak az idevonatkoz reszt reprodukalni itt):


class CsvManage():
    CsvReadNames(gettnameline):
       # give back a list

class A.(threading.Thread):
   def __ini__(self, csvget, csvput)
      self.csvget = csvget
      self.csvput = csvput
   def run(self)
      csvdata = CsvManage()
      while 1:
          try:
              gettnameline = self.csvnameget.get(True, 0.05)
              self.csvnameput.put(csvdata.CsvReadNames(gettnameline))
          except Queue.Empty:
              continue

class B.(threading.Thread):
   def __ini__(self, searcheddir, csvnameget, csvnameput)
      self.searcheddir = searcheddir
      self.csvnameget = csvnameget
      self.csvnameput = csvput
   def run(self):
      while 1
         self.csvnameget.put(self.searcheddir)
         csvfilenames = self.csvnameput.get()
         print 'OK'


threadLock = threading.Lock()
threads = []

csvnameget = Queue.Queue()
csvnameput = Queue.Queue()
csvworking = A(csvnameget, csvnameput)
csvworking.start()
threads.append(csvworking)

TEF = B.(searcheddir, csvnameget, csvnameput)
TEF.start()
threads.append(TEF)

for t in threads:
    t.join()
print "Exiting Main Thread"


Szoval : TEF a searcheddir str-et berakja a csvnameget queue-ba, ahonan a csvworking A class threat kiveszi es lefutatja a csvdata ahonan visszakap egy list-et. Ez eddig mukodik. A csvdata.CsvReadNames(gettnameline) a list amit vissza akarok adni a TEF-nek, szoval berakom a csvnameput queue-ba. De ez valami miatt nem mukodik. Mindenfele hibauzenet nelkul TEF nem lep tovabb a print 'OK'-ra. Valalmi otlet mi lehet az oka?

Ez az elso eset amikor Python Threat-kel dolgozok, szoval ha lehet ne hulyezetek le egybol.

Python Thread queue hogyan

Szisztok!

A kovetkezo problemam van: Komunikacio szalak kozott queue-val. Valami ilyesmit probalok megvalositani (a kod sokkal hosszabb es osszetettebb, szoval megprobaltam, csak az idevonatkoz reszt reprodukalni itt):


class CsvManage():
    CsvReadNames(gettnameline):
       # give back a list

class A.(threading.Thread):
   def __ini__(self, csvget, csvput)
      self.csvget = csvget
      self.csvput = csvput
   def run(self)
      csvdata = CsvManage()
      while 1:
          try:
              gettnameline = self.csvnameget.get(True, 0.05)
              self.csvnameput.put(csvdata.CsvReadNames(gettnameline))
      except Queue.Empty:
           continue

class B.(threading.Thread):
   def __ini__(self, searcheddir, csvnameget, csvnameput)
      self.searcheddir = searcheddir
      self.csvnameget = csvnameget
      self.csvnameput = csvput
   def run(self):
      while 1
         self.csvnameget.put(self.searcheddir)
         csvfilenames = self.csvnameput.get()
         print 'OK'


threadLock = threading.Lock()
threads = []

csvnameget = Queue.Queue()
csvnameput = Queue.Queue()
csvworking = A(csvnameget, csvnameput)
csvworking.start()
threads.append(csvworking)

TEF = B.(searcheddir, csvnameget, csvnameput)
TEF.start()
threads.append(TEF)

for t in threads:
    t.join()
print "Exiting Main Thread"


Szoval : TEF a searcheddir str-et berakja a csvnameget queue-ba, ahonan a csvworking A class threat kiveszi es lefutatja a csvdata ahonan visszakap egy list-et. Ez eddig mukodik. A csvdata.CsvReadNames(gettnameline) a list amit vissza akarok adni a TEF-nek, szoval berakom a csvnameput queue-ba. De ez valami miatt nem mukodik. Mindenfele hibauzenet nelkul TEF nem lep tovabb a print 'OK'-ra. Valalmi otlet mi lehet az oka?

Ez az elso eset amikor Python Threat-kel dolgozok, szoval ha lehet ne hulyezetek le egybol.