Szkriptek: Python, Perl, Bash, ...

VMware perl script "not in"

Sziasztok,

Egy olyan kérdésem lenne, hogy valaki meg tudná mondani, miként lehet "not in"-t használni perl-ben.
Konkrétan van egy egyszerű vmware perl script. És azt szeretném, hogy a filter résznél az első igaz, a második paramétert negáltját válogassa ki, vagyis a 'guest.guestState' => 'running' és a NEM 'name' => 'virtualpc' nevű gépeket szűrje ki a kapott listába.
Valaki foglalkozott már ilyennel? Ötlet?

Köszi, N

#!/usr/bin/perl -w

use strict;
use warnings;
use VMware::VIRuntime;
use VMware::VILib;

my $service_url = 'https://vmware.local/sdk/vimService';
my $userid ='root';
my $password ='123';

Vim::login(service_url => $service_url, user_name => $userid, password => $password);

my $vm_views = Vim::find_entity_views(view_type => 'VirtualMachine', filter => { 'guest.guestState' => 'running', 'name' => 'virtualpc'} );
foreach my $ev (@$vm_views){
print $ev->name . "\n";
}
Vim::logout();

Perl: fájl tartalmának betöltése tömbökbe (mátrixba)

Van egy fájlom, ami ";"-vel elválasztva tartalmaz információkat.
pl:
info1;info2;info3
info4;info5;info6
info7;info8;info9
info10;info11;info12

A kérdésem az lenne, hogy hogyan tudom ezeket beolvasni 1-1 tömbbe vagy mátrixba úgy, hogy az egyes oszlopok elemei egyenként is címezhetők legyenek.
pl. a 2. oszlop 3. elemét akarom kiválasztani, nem kell az egész oszlop, csak ez az egy elem

Eddig ezzel a módszerrel próbálkoztam:

open(FILE,"
my @info=;
my $count;
for ($count = 0; $count != 50 ; $count++){
@F = split(";", @info[$count]);
print "Első oszlop: $F[0]\n";
print "Második oszlop: $F[1]\n";
print "Első és Második oszlop: "@F[0,1]\n";
}
close FILE;

A cél az volna, hogy ne csak egész oszlopokat tudjak listázni, hanem egyes elemeket is ki tudjak íratni.
Előre is köszi a segítséget!

Regexp awk-ban

Egy másik topikban szó volt arról, bizonyos napokat színezni kellene a cal parancs kimenetében. Erre gyorsan összetákoltam egy nem igazán általános, de jó megoldást, viszont a saját scriptemet sem értem egészen, pontosabban az egyik regexpet.A cal kimenete nálam így néz ki:

     August 2013    
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

A fejléc figyelmen kívül hagyásához írtam egy ilyen regexpet:

/^ *[^[:digit:] ]/

Viszont eredetileg így akartam, csak ez nem működött jól:

/^ *[^[:digit:]]/

Az elképzelés az, hogy sor elejét követően vagy létező, vagy nem létező szóközök után amennyiben nem szám karakter jön, akkor illeszkedik a regexpre a minta, s kihagyom a színezést. Az akció része most nem érdekes.

Úgy látom, a második változatom illeszkedik arra az esetre, amikor szóközöket követően szám karakter jön. Ez egy nyakatekert értelmezésben persze lehet:

illeszkedik a sor elejére, illeszkedik valahány, de nem az összes szóközre - például nulla darabra -, majd a szóközre, amely valóban nem szám karakter.

Az a kérdésem, hogy a / */ a leghosszabb, vagy a legrövidebb olyan szakaszra illeszkedik, amelyre tud illeszkedni?

GNU Awk 4.0.2

amiről szó van.

python, menu, GUI, tkinter

Akarok csinalni egy kis python programot aminek van GUI-ja... vagyis inkabb csak "GUI", mert nagyon egyszeru. Pythonban kezdo vagyok... de nem ez a gond, hanem, hogy GUI-t meg sosem csinaltam, abban abszolut nem vagyok kepben. (GUI alatt Linux dextopon mukodo grafikus interface-t ertek most)

Nagyon egyszeru dologrol lenne szo. Amikor a program elindul, dobjon fel egy menut amibol valasztani lehet. De nem kell igazi window, meg becsuk gomb es egyebek, csak egy popup menu nehany elemmel (mintha csak jobb gombbal kattintanank), ha valaszt valamit akkor a GUI be is csukodhat, a tobbit megoldom (persze azt tudnom kell mire kattintott a user).

Minek olvassak utana? A python GUI-ra keresve hamar a wxwidget-be botlottam ami szimpatikus, de nagyon komplikalt ahhoz kepest ami nekem kell. Van egyszerubb mod, vagy kenytelen leszek a wx-nek rendesen utanaolvasni? Az tetszik a wxwidget-ben, hogy nincs a pythonhoz drotozva, mashol is jol johet meg ha ezt hasznalom. A wx+python+popup+menu kereses meg csupa olyan lehetoseget ad, ahol van window is es azon belul csinalnak egy menut. De nekem a window nem kell!

A teljes megoldast tartalmazo minta kodokat is szivesen latok a jotanacsok mellett. ;)

--------------------------------------------------------------------------------
Update (2013.08.08.)
A szamomra eppen megfelelo tk-ra epulo megoldas Lajatol:


from Tkinter import *

root = Tk()

def hello():
    print "hello!"
    root.destroy()

# create a popup menu
menu = Menu(root, tearoff=0)
menu.add_command(label="Undo", command=hello)
menu.add_command(label="Redo", command=hello)

menu.post(100, 100)

root.withdraw()
root.mainloop()

--------------------------------------------------------------------------------
Update 2 (2013.08.12.)
Akadt meg egy kis bajom. A fenti szuperul mukodik... csakhogy a menuket dinamikusan generalom a hozza tartozo commandoknak meg parametere van, valami ilyesmi (lenne):


for one in list:
  menu.add_command(label=one, command=hello(one)) # WRONG!

Ez igy persze nem megy... kicsit modositva mar legalabb fut, de meg mindig nem jo:


for one in list:
  menu.add_command(label=one, command=lambda:hello(one))

Aki a lambda-t nalam jobban erti, annak bizos leesett, ami nekem csak sok probalkozas utan.... hogy ez igy annyira dinamikus, hogy a "one" csak a hivas pillanataban helyettesitodik be, akkor meg persze a "list" utolso eleme lesz mar az erteke, szoval az osszes menuelem, ugyanazt a hello(legutolso elem a list-bol) hivast hajtja vegre.

Hogy lehetne ezt normalisan lekezelni? Vagy ha az ennyire dinamikus parameter atadas nem megy, akkor a "hello" fuggvenybol hogyan tudnam lekerdezni, hogy melyik menu elemre kattintott a user?

--------------------------------------------------------------------------------
Update 3 (2013.08.12.)
Laja nagyon porog, erre a problemara is szallitotta a megoldast:


for one in myList:
    menu.add_command(label=one, command=lambda one=one: hello(one))

--------------------------------------------------------------------------------
Update 4 (2013.08.21.)
Koszi meg egyszer mindenkinek. Ez lett belole:
hup.hu: blog/traktor: BrowserSelector
Meg van mit rajta mit csiszolni, de az mar foleg nem a GUI lesz. A GUI-val most mar csak annyi bajom van, hogy nem lesz aktiv a menu amikor felugrik (nem kap fokuszt), igy a billentyuzet nem mukodik raja (le, fel, enter, shortcut-ok), de ez mar aprosag es remelem majd megoldom.

Giderosmobile (lua) memória optimalizálás

Sziasztok

Szeretnék Giderosban egy programot írni, amiben rengeteg kép van
a kérdésem az lenne, hogy hogyan lehet a képeket dinamikusan betölteni a memóriába, és onnan kiszedni, ha már nem kellenek?

A másik kérdésem pedig az lenne, hogy az Application:getTextureMemoryUsage() ( http://docs.giderosmobile.com/reference/gideros/Application/getTextureM… )
függvény ugye azt mondja meg, hogy mennyi memóriát használ a program?
Mert kipróbáltam azt, hogy


a = Texture.new("a.jpg")
print(Application:getTextureMemoryUsage()) -- erre írt egy számot
a = nil
print(Application:getTextureMemoryUsage()) -- erre ugyanazt a számot írta

A válaszotokat előre is köszönöm

awk és a Vodafoneos telefonszámlám

Sziasztok!

Szeretnék írni egy scriptet amiben a havi telefonszámlám van nekem megfelelően részletezve. Vagyis szolgáltatónként a fizetendő összeg, és az összes összeg, valamint ugyan így a beszélt idők, SMS-ek száma is. Pénz összegekkel pont meg is tudtam írni egy sorban gawk segítségével:
gawk '{FS=";"}
{sum += 8}
/Vodafone/ {v += $8}
/Telenor/ {p += $8}
/T-Mobile/ {t += $8}
/Budapest/ {b += $8}
END {print sum}
END {print t,p,v,b}
END {print t+p+v+b}'

A vodafonetól letöltött .csv fájl így kiad 3 sort:
A teljes oszlop összege
Az általam beállított szolgáltatók összege
Szolgáltatók összeadva (ez csak azért kell mert hátha van még valami külföld, egyéb szolgáltató mit tudom én, szóval az első és 3. sornak egyeznie kell)

De mit csináljak a 'Időtartammal'? Ahol hh:mm:ss formátumban vannak az adatok vagy kB-ban az adatforgalom. Hogy lehet összeadni időket awk segítségével? Van rá lehetőség?

(MEGOLDVA) Bash szkript, CPU limit

Sziasztok!

Ti hogyan oldanátok meg a következőt:
Adott pár user (változó user szám) egy eléggé elcseszett programmal, ami random indokolatlanul elkezdi a cput pörgetni. Ha lekorlátozom a cpu használatot cpulimittel, akkor is tökéletesen és ugyan úgy fut a program.
Cél: Egy olyan bash scriptet szeretnék írni, ami cronal óránként lefut. (pid szam megvan mivel alapból úgy indítom a programot h generáljon egy filet amiben benne van az adott program pid szama) és bekorlátozza a cput 10%-ra.
A program egy adott userkent fut.
Odáig eljutottam, hogy usereket hogy listázom ki egy fájlba. cd /home/program/userek; ls >userek
User pid: /home/program/user/xxx.pid

Sajnos ehhez a szinthez még elég low vagyok.

Élőrre is köszi minden commentet.

HELP - root jog scripten belül

Egy roppant egyszerű scriptet kéne írnom, ám van benne egy pici csavar, egy másoláshoz kéne root jog:

A lényegi rész
...
wget http://x.hu/valami_program #letöltöm a programot
cp valami_program /usr/local/bin #itt a probléma, mert ide root jog kellene
...

A biztonsági szempontok nem játszanak, desktop gép, néha a juzernek upgrade-elnie kéne a progit, ennyi az egész, csak nem akarom, hogy jelszavakat gépeljen be, használja a su-t, minél egyszerűbb életet akarok neki. Tudja a root jelszót, csak nem akarom, hogy egy parancs kiadásánál többet kelljen csinálnia.

Valami ötlet?

[megoldva] Szkripten belüli kimenet-átirányítás

Azt szeretném, ha egy php szkriptem "önmagában" indítható lenne, és a kimenet helyét is elegánsan (valahogy ott a shebang részen) megadhatnám. Tehát nem akarok fwrite-ot használni, hanem valamilyen stdout-átirányítást.

A szkript eleje ilyen:
#!/usr/bin/php
<?php
...

A fájl futtatható, tehát egy ./szkriptem.php paranccsal elindul. Azt szeretném, ha a kimenetet (pl. az első sorban valahogy megadva) kedvemre irányíthatnám. Sajnos, ha a fájl elejére írok egy > /tmp/ide-t, akkor ezt kapom: "Could not open input file: > /tmp/ide"

Egy olyan kerülőút persze van, hogy írok egy másik szkriptet, amiben meg tudom hívni: ./szkriptem.php > idemenj, de ezt nem szeretném, hanem egy önmagában "jól dokumentált", beszédes fájlra vágyom. Nem szeretném a php -r '...'>ide megoldást sem használni.