Szkriptek: Python, Perl, Bash, ...

Tkinter resize

Megint elővettem a Tkintert, hogy ismerkedjek vele. (Egyszer már belebuktam vagy egy éve :)) Akkor valahonnan letöltöttem egy mintát, amin egy frame-ben van editálható szövegmező, gombok, beviteli ablak, szóval efféle alapdolgok, hogy piszkálgathassam.
Akkor is azon buktam meg, hogy ez a frame átméretezhető volt ugyan alapból, de a benne levő szövegmező ugyanakkora méretű maradt és így nagyon gáz.
1. Nem találok megfelelő metódust hozzá: resize vagy hasonló szinonimákat keresek. Förmedjetek rám, hogy nem is úgy kell, csak akkor hogyan?
2. A .grid használatával nem saját magam akadályozom az átméretezhetőséget?

Szerk.: Hogy ne csak a levegőbe beszéljek, az ide vágó részlet:

root = Tk()
root.title("System beta version")
root.usrtext = Text(root, bg = "light yellow", fg = "black",relief=SUNKEN)
root.usrtext.grid(row=0, columnspan=16, rowspan=2, sticky=W+E+N+S, padx=5, pady=5)
root.fname = StringVar()
root.fname = ""
filestring = StringVar()
root.last_saved_text=StringVar()
root.last_saved_text=""
root.compiled_text=StringVar()
root.compiled_text=""
cimke1 = Label(root, text="Variable:").grid(row=3, sticky=W, padx=5)
cimke2 = Label(root, text="Value:").grid(row=4, sticky=W, padx=5)
cimke3 = Label(root, text="Subroutine:").grid(row=5, sticky=W, padx=5)
cimke4 = Label(root, textvariable=filestring, font=("Arial Black", 10)).grid(row=6, columnspan=16, padx=5, sticky=W)
mezo1 = Entry(root, bg = "light cyan", fg = "black", relief=SUNKEN)
mezo1.grid(row=3, column=1, sticky=W)
mezo2 = Entry(root, bg = "light cyan", fg = "black", relief=SUNKEN)
mezo2.grid(row=4, column=1, sticky=W)
mezo3 = Entry(root, bg = "light cyan", fg = "black", relief=SUNKEN)
mezo3.grid(row=5, column=1, sticky=W)
gomb1 = Button(root, text='Read', height=1, width=4, relief=RAISED, command=readvar)
gomb1.grid(row=3, column=2)
gomb2 = Button(root, text='Write', height=1, width=4, relief=RAISED, command=writevar)
gomb2.grid(row=4, column=2)
gomb3 = Button(root, text='Execute', height=1, width=4, relief=RAISED, command=executesub)
gomb3.grid(row=5, column=2)
gomb4 = Button(root, text='Run / load', height=1, width=10, relief=RAISED, command=compile)
gomb4.grid(row=4, column=14)

app = App(root)

i=DeviceExplore()
errorstring=DeviceVersnr()

if (i==0):
errorstring=DeviceVersnr()
if showerror('Error !','There is no connection\n%s.' % errorstring):
root.destroy()

if (i==-1):
errorstring='Chip was found but cannot be claimed'
if showerror('Error !','%s' % errorstring):
root.destroy()
if (i>1):
errorstring='Conflict: more than one chip was found'
if showerror('Error !','%s' % errorstring):
root.destroy()

if (i==1):
DeviceSetMyBuffer(root.usrtext.get(1.0,END))

root.mainloop()

[MEGOLDVA]perl változók hatóköre

hello

ezen kódrészlet nem ad vissza nekem semmit pedig szerintem kéne:
my $var = '';
$var++ while ($var lt 10 );
print $var until ($var-- gt 0);

mi lehet a gond? a $var az elején globális változó azt frissíti az első $var++ növeli majd a második $var-- pedig csökkenti.
vagy tévedek és a második ciklus is az üres stringet látja?
ez alapján: http://perlmaven.com/scope-of-variables-in-perl (Variable scope: visible everywhere)
menni e kéne.

UPDATA
A megoldás:
my $var = 0;
print "$var\n";
$var++ while ($var < 10 );
print $var."\n" until ($var-- == 0);

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