Szkriptek: Python, Perl, Bash, ...

python: ImportError: cannot import name timegm

Sziasztok!

A mechanize modult akarom használni Python alatt (Ubuntu 12.04.1), de egy egysoros script, ami csak azt tartalmazza, hogy:

import mechanize

már ilyen hibát dob.


File "/usr/local/lib/python2.7/dist-packages/mechanize/_util.py", line 59, in
from calendar import timegm
ImportError: cannot import name timegm

Én értem, hogy a calendar.py-t keresi a sys.path -ban, és onnan próbálja a timegm függvényt betölteni. Viszont a sys.path-ban megvan az a dir is, ahol a calendar.py tartózkodik (/usr/lib/python2.7).


$ python
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

Mi lehet a gond? Nem hiszem, hogy a mechanize a bűnös, mert szimplán kiadva a from calendar import timegm parancsot is hibát okoz.

dátumok konvertálása UTC formába bash-hal

Cron időzítés miatt szükségem volna elkövetkező időpontok UTC formába való konvertálására.

Adott 3 érték: a hét napja, óra és perc.
3 12:10 - ez ezt jelenti: szerda 12:10 (Igazából minden szerda - cron miatt)
Ebből hogyan lehet UTC időt varázsolni? Az időpontok minden esetben így érkeznek, esetleg még így: mindennap 10:30-kor,
vagy így: 1-3 8:50 (hétfőn, kedden, szerdán 8:50-kor)

A date paranccsal való kísérletezgetéseim közben eddig nem jöttem rá, hogy 3 adatból hogyan lehetne ezt kihozni.
Hiányzik a month értéke.

echo -n "Add meg az adatokat szóközzel! (nap, óra, perc): "
read HN hour minute

Itt a HN a hét napja, és ezt nem tudom megetetni a date paranccsal. Ő persze kiírja számmal hogy az aktuális nap az melyik a héten: date +%u
De ez visszafelé hogy működik?

De a feldolgozáshoz fake adatot is meg kell neki adnom. Jelen esetben először a hónapot:
month=$(date +%m) # aktuális hónap
secs=$(date -d "${month}/${day} ${hour}:${minute}" +%s)
echo $secs

De ez nem tökéletes, mert pont a "HN" értéke hiányzik. Azt nem tudom átültetni. Helyette most "day" van.
Igen olvastam a man-t de nem lettem okosabb.

Mégegyszer: elkövetkező időpontok UTC formába való konvertálása.
Kinek van ötlete?

Adott <div> tag "előléptetése" <body>-vá több HTML fájlban

Egy olyan megoldást keresek, amellyel több html fájlban valamilyen selectorral megadott div elemet "léptet elő" a fájlok tagjaként.

A következő példa mutatja, mire gondolok pontosan.

Miután kiadtam a proposebody.sh -selector ".myClass" test.html parancsot, akkor ebből a html-ből:


<html>
<head>
    <link href="resources/css/my.css" rel="stylesheet" type="text/css">
</head>
<body>
    <div class="notMyClass">
        <table>
            <tr>
                <td>
                    <div class="myClass">
                        <h2>Heading</h2>
                        <p>Paragraph</p>
                        <div class="included"></div>
                    </div>
                </td>
            </tr>
        </table>
    </div>
    <div class="excluded"></div>
</body>
</html>

Ezt szeretném előállítani:


<html>
<head>
    <link href="resources/css/my.css" rel="stylesheet" type="text/css">
</head>
<body>
    <h2>Heading</h2>
    <p>Paragraph</p>
    <div class="included"></div>
</body>
</html>

Minden megoldás érdekel.

Szerkesztve: Ha bármilyen selectorral működne, az maga lenne a tökély :-) (pl.: "table div.myClass", vagy másik példával "#container-25 li.red")

A find, a xargs és a csúf (=szerkesztés alatti Word-dokumentum)

Mi a teendő?

find /srv/cucc -name '*' ! -user root -type f
/srv/cucc/~$kumentum.docx

find /srv/cucc -name '*' ! -user root -type f -print0 | xargs -0 -I {} sh -c "chown root:csoport \"{}\"; chmod 0660 \"{}\""
chown: cannot access `/srv/cucc/~.docx': No such file or directory

Debug:

find /srv/cucc -name '*' ! -user root -type f -print0 | xargs -0 -I "{}" sh -c "echo \"{}\""
/srv/cucc/~.docx

Ezek szerint a xargs okozza a bajt, ugye? De hogy oldjam meg a problémát?
Köszönöm a segítséget.

[solved] perl, FCGI.pm, fork(), pipe() 2>&1

Kérem szépen, valaki Perl mágus világosítson fel mit rontok el az alábbi kódban!
Nincs kimenet (upstream prematurely closed FastGCI stdout... üzenet az nginx-tõl), SIGPIPE-pal/Illegal seek-kel elhal valami, meg ilyet is dob:

Not a GLOB reference at /usr/lib/perl5/FCGI.pm line 125

Valahogy az FCGI modulhoz lesz köze, mert csupán a do_request-et futtatva simán teszi, amire kérem: a futtatandó cgi (@app) stderr-ja is az stdout-ba menjen.
Ennyit szeretnék mindössze. Próbalkoztam az IPC::Open3-mal, de arra meg Broken pipe-ot dob! A pájpolós+forkolós rész helyett ez volt:


    $appPID = open3(\*reader, \*writer, 0, @app);
    print {*writer} <STDIN>;
    close *writer;
    print <reader>;
    waitpid ...

Érdekes ugyanakkor, hogy IPC::Open2 minden exception nélkül mũködött, csakhát az különhagyja az stderr-t.

a lényeges részek tehát:


use FCGI;
$\=$/=undef;
$request = FCGI::Request();

sub do_request() {
    push my @app, qw(sudo -E -u anybody /path/to/anyscript.sh);

	pipe PR, CW;  # parent reader, child writer
	pipe CR, PW;  # child reader, parent writer
	my $appPID = fork;
	if($appPID == 0) {
		# Child.
		close CR;
		close CW;
		open STDIN, "<&=PR";
		open STDOUT, ">&=PW";
		open STDERR, ">&=PW";
		exec @app;
		exit $?;
	}

	# Parent.
	close PR;
	close PW;
	print CW <STDIN>;
	close CW;
	print <CR>;

    waitpid($appPID, 0);
    $app_exit_status = $? >> 8;

    $request->Finish();
}

while($handling_request = ($request->Accept() >= 0)) {
    &do_request;
}

Így néz ki, ahogy nem fogom megcsinálni:

print `/path/to/anyscript.sh 2>&1`

;

--- edit ---

... és így, ahogyan igen: http://hup.hu/node/117836#comment-1507958

smbpasswd script [Megoldva]

(echo $actualpass; echo $newpass; echo $newpass) | smbpasswd -r sambaserver -s -U $user

Nyilvan ez igy nem mukodik, kulonben nem postolnam, de a kerdes hogy mikent kell modositani hogy mukodjon.
Ha a script alapjan nem lenne egyertelmu egy remote samba serveren kellene jelszot valtoztatnom, bementkent van egy usernevem, egy aktualis jelszom es egy uj jelszom.

Talaltam egy par ilyesmit de vagy nem remoteban futtattak vagy pedig, nem passwdupdate volt hanem uj user.

excel to html több sor illetve oszlop de nem tartomány

Sziasztok.

A következő problémával fordulok hozzátok. Egy ms xls file-ról lenne szó. Szeretném kinyerni az adatokat html formátumba, mindezt linux cli bash környezetben.

Eddig xlhtml el próbálkoztam :
xlhtml -xr:1-18 -xc:3-28 test.xls >> test.html

igy ki is rakja az 1-18 ig sorokat.

Nekem kellene pl az első sor, meg a 18-dik de a köztes tartalom nem. Így próbáltam megadni de nem megy. Ha jól sejtem akkor az xlhtml zsákutca.

Ti mivel oldanátok meg?

Válaszotokat köszi előre is.

Kulcs szerinti összegek

Van valami egyszerű GNU utility amivel kulcs szerint összegezhetők egész számok? Perlben, awk-ban meg tudom csinálni, csak macerás. Valami olyasmit keresek mint számlálásra a "uniq -c". Minél egyszerűbb, annál jobb.

Például:

Bemenet:
11780 httpd
11552 httpd
1400 crond

Kimenet:
23332 httpd
1400 crond

[megoldva] django - ManyToManyField.add sebesseg

hello

Egy django sebesseg kerdesre keresem a valaszt, sajna google nem sok jot mondott, vagy nem jol kerestem.

Adott a felallas: van egy android app, ami idonkent meghiv egy url-t, a szerveren pedig lefut ennek hatasara egy kod (sajnos nem lehet belenyulni, ezzel kell dolgozni). A kerdesem az lenne, hogy szerver terheles szempontjabol melyik kimeletesebb:a) verzio: csak siman hasznalom az add() fuggvenyt, a szerver pedig ugy is tudja, hogy nem kell megcsinalnia, mert az userhez eleve hozza van rendelve a konyv:


-------------------------------
try:
    user = UserProfile.objects.get(user_id=request.POST['user_id'])
except UserProfile.DoesNotExist:
    user = UserProfile.objects.create(...)

book = Book.objects.get(url=request.POST['book_id'])
user.book.add(book)
-------------------------------

b) verzio: erdemes lenne-e elobb megerdeklodni a szervertol a user.book.add(book) elott, hogy letezik-e mar az user-nel az adott konyv, es csak akkor hozzarendelni, ha nincs me'g.

Azert hezitalok, mert ugye a b) verzio is eszik nemi eroforrast. Kerdes, hogy a django melyiket kezeli okosabban/gyorsabban. Egyaltalan van-e ertelme ilyen tipusu optimalizalasnak?

MEGOLDVA
connection.queries volt a megoldas es a b) verzio a nyero. Az a)-nal 3db SELECT es 2db INSERT futott le, a b)-nel csak a 3 SELECT

python - bash - grep

Udv!

Most belefutottam egy szamomra erdekes problemaba. A lenyeg, hogy volt egy haromszoros for ciklus egy python programban, amire grepet raktam, es fura volt, hogy egesz ejszaka semmit sem talalt. A problemas kodot sikerult erre a par sorra levezetni:



for i in xrange(0, 5):
    print "%s %s" % ('alma', 'beka')
    time.sleep(1)

Na most ezt ugye csak kiir masodpercenkent 1 sorba 2 szot (

\n

- nel a vegen) 5 alkalommal, majd kilep. Ha ugy futtatom, hogy

./prg.py

ez mukodik is, viszont ha ugy, hogy

./prg.py | grep -i a

azt csinalja, hogy 5 masodpercig nem ir ki semmit, majd 5 masodperc utan egybol az 5 sort. Ha megirom ugyanezt a programot shellben, nem all fent ez a problema.

Van valakinek otlete mi lehet ennek az oka? Ugye az a fura, hogy ha nincs grep, akkor masodpercenkent kiirja az outputot.

Na most pl. ha megprobalom beiranyitani egy fajlba az eredmenyt, akkor is csak 5 masodperc utan jelenik meg barmi is a fajlban, addig csak letrejon, de nem valtozik a (z ures) tartalma. Ha egy shell script generalja ugyanazt a tartalmat, minden normalis.

Koszi a valaszokat.