Szkriptek: Python, Perl, Bash, ...

pingelő bash script, ami a route táblát módosítja

Gépen internetkapcsolat mondjuk upc, de rendelkezem tartalék kapcsolattal is: westel hsdpa. (ez utóbbi forgalom korlátos)
A cél az lenne hogy ha upc-vel valami gond van, nem elérhető egy számomra fontos gép az interneten, akkor tárcsázzon a másikon, aztán ha újra elérhető upc-n, akkor bontson szigorúan.., szigorúan, mivel forgalmi korlát.
cront ki szeretném hagyni a játékból.

Több problémám is van:
Első nekifutásból (kedzdő bash, ilyesmik) írtam egy scriptet ami pingel végtelen ciklusban, és ha nem sikeres akkor "pon westel".
Így aztan nem pingelt tovább mivel már a pon futott helyette..., kölköt szült.

Másik gondom az, hogy mivel nekem egy gépet fontos elérnem, azt pingelgetem..., de ha nem elérhető upc-n és átvált westelre, akkor már a ping is a westelen menne... fontos lenne hogy route cél westelen legyen, mivel kifejezetten ahhoz a géphez való kommunikáció miatt az egész.

Megoldásom: (a kérdés az, hogy ez így mennyire jó, szép, ti hogyan csinálnátok)
-két prog(script) fut folyamatosan (nem csak egy ami pingel)
Az egyik pingel www.hup.hu-t ("második gond"-ra nem találtam megoldást, ezért most ideiglenesen a hup-ot pingeli a rendes cél helyett)
Ha ping nem sikeres, akkor egy file-ba beleírja hogy westel ha sikeres akkor pedig azt hogy upc és kill "ppp"
Mindezt folyamatosan, végtelen ciklus sleep x
Másik program (script) pedig nézi az elöbbi által írt file-t, és ha az van benne hogy "westel" akkor pon westel
(és ezt majd kill az első ha megy ping)
Mindkettő daemon, így újraindul, azaz tárcsázó is újraindul ha másik legyilkolta.

Mennyire megbízható ez így és ha nem az... akkor hogyan kellene megoldani a dolgot?

std, soronként való prefixelése

Azt kéne valahogy elérnem, hogy egy fájlba beleírni a kimenetet úgy, hogy a kimenet minden sora kapjon egy adott prefix-et. A prefix függ attól hogy melyik kimenetre érkezett a szöveg. (O- stdout, E- strerr)

Pár próbálkozásom már volt, de a kimenet sorrendje nem volt megfelelő amikor a kimeneteket összefűztem.
A gcc warningjait szeretném egy felületen máshogy megjeleníteni, így a megoldás gyakorlatilag teljesen mindegy milyen nyelven van. (c, c++, java, python, perl)

Ha esetleg tudtok olyan programot amelyik nem terminált emulálva jeleníti meg a programfordítás kimenetét akkor az is jöhet, aztán kiszedem a forrásából a megoldást. :)

[SOLVED] AS3 eventDispatcher()

Kene egy kis segitseg...

Mar irtam egy kis demot is magamnak, mert nagy projectben nem mukodott a sajat esemenyfigyelo irasa... A lenyeg:
Van egy Flash, amiben as3-at hasznalok...
Az fla-ban be van alitva kezdeti objektumnak a megfelelo objektum jelen esetben a myEventDispatcher.Figyelo ...
Ami el akarok erni, hogy itt amikor rakattintok a kis myBlock nevu MovieClip-re, akkor megjelenjen, hogy megszolalt... Ez elegge el van vonatkoztatva a celtol, mert az meg egy Galeria lesz =) de nekem ott is mar az esemeny elfogasakor vegrehajtodo fuggveny nem hivodik meg...3 file-bol all...
1 .fla, ami egy blank feher semmi...
2 .as, amiben a 2 object van...
Minden mukodik, tehat a benne talalhato MouseEvent.CLICK is mukodik a trace kidobja, meg minden lefut, csak epp a sajat esemenyemet nem tudom elkapni... Hol lhet a gond vele...

A "dispatchEvent" es az "addEventListener" fuggyvenyeket probaltam ugy is, hogy ele irom, hogy "this.", tehat "this.dispatchEvent" es "this.addEventListener"

Figyelo.as:


package myEventDispatcher {
	import flash.events.*;
	import flash.display.Sprite;
	
	public class Figyelo extends Sprite {
		public function Figyelo() {
			var obj:Figyelt = new Figyelt();
			addChild(obj.block);
			trace("addEventListener elott");
			addEventListener(Figyelt.DO_SOUND, this.zajFigyelo);
			trace("addEventListener utan");
		}
		
		private function zajFigyelo(e:Event) {
			trace('Megszolalt');
		}
	}
}

Figyelt.as:


package myEventDispatcher {
	import flash.events.*;
	
	public class Figyelt extends EventDispatcher {
		public static const DO_SOUND:String = "DO_SOUND";
		public var block:myBlock;
		
		public function Figyelt() {
			this.block = new myBlock();
			this.block.addEventListener(MouseEvent.CLICK, onClick);
		}
		
		private function onClick(e:Event) {
			trace("dispatchEvent elott");
			dispatchEvent(new Event(Figyelt.DO_SOUND, true));
			trace("dispatchEvent utan");
		}
	}
}

DebugOutput [trace kimenetek]:


addEventListener elott
addEventListener utan

Amikor rakattintok a myBlock-ra, akkor meg hozzajon ez:


dispatchEvent elott
dispatchEvent utan

Elore is koszi a segitseget =)

perl pdf készítés

Hali!

Már több napja küzdök egy problémával és remélem talán itt tud valaki segíteni.
Röviden:
Van egy általam írt cgi alapú honlap melyhez felmerült most egy olyan igény, hogy pdf formátumú árajánlatot kell készíteni. Az árajánlat megvan html formában, de nem tudok sehogy pdf-et csinálni belőle.

- Kerestem és ki is próbáltam több html-pdf konvertert, de egyik sem támogatta rendesen a css formázást.
- Javasolták, hogy használjak apache fop-ot. Itt az egyetlen problémám, hogy egy külső javás programot kell meghívni (de elviselem, ha nincs más mód), valamint hogy bonyolult xslt-t kell írni hozzá amihez nem értek. Próbálta már valaki? Megéri szenvedni vele?
- Próbáltam tex-ből is a konvertálást, de nem tudam a méreteket pontosan beállítani. Fontos lenne, hogy pontosan úgy nézzen ki mint a html, mert kötött formája van az ajánlatnak.

Esetleg valakinek valami ötlet?

Ruby/Gtk - Gtk-s assertion sorozat

Sziasztok!

Elkezdtem egy egyszeru terminalprogit irni Ruby/Gtk-ban, mivel ez eleg konnyu, a peldak kozt is van ilyen. Amde elakadtam. A kerdes nem annyira Ruby-s mint inkabb Gtk-s.

Szoval, a terv: adott egy ComboBoxEntry, ebbe tarolodnak a szerverek cimei. Attol fuggoen, hogy az user milyen protokollt valaszt, dol el, hogy milyen history-t mutatok neki.

A kod (kihagyva az irrelevans reszek)


require 'gtk2'
require 'mterm/glade'

module MTerm
  class ConnectWindow
    attr :rsp
    def initialize
      glade = Glade.new.glade
      @dlgConn = glade['dlgConn']
      @cbServer = glade['cbServer']
      @btConn = glade['btConn']
      @btCancel = glade['btCancel']
      @rbtTelnet = glade['rbtTelnet']
      @rbtTN = glade['rbtTN']
      @rbtSSH = glade['rbtSSH']
      
      @btConn.signal_connect('clicked') { btConn_click }
      @btCancel.signal_connect('clicked') do
        @rsp = nil
        @dlgConn.hide
      end
      
      collect_servers
      @rbtSSH.signal_connect('toggled') { fill_combo @ssh_servers }
      @rbtTelnet.signal_connect('toggled') { fill_combo @telnet_servers }
      @rbtTN.signal_connect('toggled') { fill_combo @tn_servers }
      @rbtSSH.active = true
      fill_combo @ssh_servers
    end
    
    def run
      @dlgConn.run
    end
    
    private

    def collect_servers
      @ssh_servers = []
      @telnet_servers = []
      @tn_servers = []
      File.open(File.expand_path "~/.ssh/known_hosts").readlines.each do |line|
        line.strip!
        hosts = line.split(/\ /)[0]
        hosts.split(/,/).each do |host|
          if host.include? ':'
            host, port = host.split /:/
          else
            port = 22
          end
          #puts host
          host = host.scan(/\[([^\]]*)\]/)[0][0] if host.include? '['
          @ssh_servers << { :host => host, :port => port.to_i }
        end
      end
      @ssh_servers.sort! { |a,b| a[:host] <=> b[:host] }

    end

    def fill_combo(hlist)
      puts hlist.inspect
      #if @cbServer.model.nil?
      #  @cbServer.model = Gtk::ListStore.new String
      #end
      unless hlist.empty?
        @cbServer.model = Gtk::ListStore.new String
        ls = @cbServer.model
        hlist.each do |s|
          it = ls.append
          it[0] = s[:host]
        end
        @cbServer.text_column = 0
      else
        puts "#empty"
        @cbServer.model = nil
        @cbServer.text_column = -1 
      end
    end

    def save_history
    end
  end
end

# vim: ts=2 et

A problema a fill_combo-nal jon valahol elo, a hiba:


#empty
/usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb: line 31
   Gtk-CRITICAL **:gtk_combo_box_entry_set_text_column: assertion `text_column >= 0' failed

vagy


/usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb: line 31
   Gtk-CRITICAL **:gtk_combo_box_entry_set_text_column: assertion `entry_box->priv->text_column == -1' failed

Ez inkabb valami Gtk hulyeseg, de nem jovok ra, micsoda. Az lehet gond, hogy a combo maga glade-bol van elobanyaszva?

PS: az mterm/glade.rb az a ruby-glade-create-template altal generalt osztaly, aminek csak a neve van atirva, egyebkent az van benne, amit a template keszito belerakott.

text crypt segítség

Hi!

Kellene egy kis segítség. Txt fájlt akarok kódolni egy spec módszerrrel.

A lénygeg:
text1 fájl tartalma:
alma alma korte

A kimeneti fájl tartalma text2.txt

a3l4m5a6 6a5l3m2a1 3k4o5r6t9e1
A lényeg, hogy minden karakter helyere (szóköz is) egy random (0-9 kozes eso ) szamot szurok be.

Köszi a segítséget.

xauth kierőszakolása

Szkript-probléma is meg nem is...

Írnék egy kétkomponensű Tk programot, amelyben a komponensek senddel kommunikálnának.
Kiderült, hogy ez nem ilyen egyszerű, mert az eredmény

X server insecure (must use xauth-style authorization); command ignored

A net aszondja, hogy a titok nyitja, hogy nem szabad xhost, csak xauth alapon autentikálni.
OK, legyártottam az .Xauthority fájlt, és ellenőriztem, hogy a startx a megfelelő paraméterrel (-auth ~/.Xauthority) indítja-e a xinitet a végén (igen), de a hiba ugyanaz.

További sugallat: az xhost kimenetének üresnek kell lennie, különben az xauth nem lép üzembe.
És ez a probléma: minden xhost sort kivettem a szkriptjeimből, és a végén már wrapperbe fogtam az xhostot, kiloggolva, ha valami hívja (már semmi), de mégis, következetesen kiadja az xhost, hogy az összes felhúzott INET: címem, és a LOCAL: általa jogosult - az xauth meg nem játszik ezért.

Ezek után a xorgot vádolom (fedora 7), hogy alapból betrükközi a lokális címeket, és magát a LOCAL:-t a xhost listába, csak nem tudom, hogy hogyan, hogy létezik-e ilyen, hogy szabad volna-e csinálnia, és hogyan lehet leszoktatni róla.

Akad bárkinek hasonló tapasztalata, netán megoldása?

python segítség

Sziasztok

Van egy ilyen kódrészletem, ami valamiért nem szeretne működni, pedig elvileg jó.
import urllib
import urllib2
theurl = '127.0.0.1/server-status?auto'
protocol = 'http://'
username = 'csy'
password = 'password'
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, theurl, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
f = urllib2.urlopen(protocol + theurl)
temp = f.read()
f.close()
temp = temp.replace(" ", "_")
temp = temp.replace(":_", ".value ")
print temp.lower()

A hibaüzenet:
File "./lighttpd_stats", line 39, in
f = urllib2.urlopen(protocol + theurl)
File "/usr/lib/python2.5/urllib2.py", line 124, in urlopen
return _opener.open(url, data)
File "/usr/lib/python2.5/urllib2.py", line 387, in open
response = meth(req, response)
File "/usr/lib/python2.5/urllib2.py", line 498, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.5/urllib2.py", line 425, in error
return self._call_chain(*args)
File "/usr/lib/python2.5/urllib2.py", line 360, in _call_chain
result = func(*args)
File "/usr/lib/python2.5/urllib2.py", line 506, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 401: Unauthorized

A cél egy lighttpd server-status oldal muninozása, az a rész gond nélkül megy, ha nincs basic-auth al védve az oldal.
Python guruk, mit rontok el ?

csy

Speciális karakter probléma bash scriptben

Sziasztok!

Adott egy egyszerű script, ami annyit tesz, hogy egy adott könyvtárban megkeresi hol helyezkedik el az argumentumként megadott fájl, majd attól a fájltól kezdve az összeset átadja az mplayernek lejátszásra.
Ez több darabból álló filmeknél, sorozatoknál jól jön, csak a speciális karakterekkel akad gondja, jelen esetben a ' jellel.
A szkript:

#!/bin/sh
pkill -19 rtorrent
cd "$(dirname "$1")"
file=$(echo $(basename "$1")|sed 's/ /\\ /g'|sed 's/\[/\\\[/g'|sed 's/\]/\\\]/g')
ls|grep -A 100 "$file"|sed 's/ /\\ /g'|xargs sudo nice -n -10 mplayer -fs
pkill -18 rtorrent

Hibaüzenet: "xargs: pár nélküli egyszeres idézőjel; alapértelmezésben az idézőjelek speciálisak az xargs számára, hacsak nem használja a -0 kapcsolót"
Ha a "file" sorhoz hozzárakok egy plusz sed-es részt(sed "s/\'/\\\'/g"), akkor sem védi le, ha "xargs -0"-t írok, akkor a többi fájlt sem játssza le.
Van egy hasonló script a mocp-hoz, de annál is ugyanez a probléma.

Hogyan lehetne megoldani, hogy minden speciális karaktert lekezeljen a fájl nevekben?