Szkriptek: Python, Perl, Bash, ...

S.O.S.

S.O.S.
helo

szeretnék egy kis
segítséget
kérni mert
van egy scriptem ami fut meg jo elvileg de megis kidom +ba egy hibauzenetet! te értesz hozzá? éjfélig kellene elkuldenem a tanarnak kulonben bukta a félév!
előre is koszi a segítséget

#!/bin/bash
#A script a paraméterben megadott könyvtárban megvizsgálja, hogy van-e
#événytelen szimbolkus link és ha ilyet talál, azt törli. Legyen lehetőség
#rekurziv hívásra és a műveletek logolására(egy fájlba). Ha nem adunk meg elé
#rési utat, akkor az alapértelmezett legyen a ,,.".
# lcl -R -l LOGFILE /home/h481815/OKTATAS

function errormsg(){
echo "Hiba történt!"
echo "Használat:"
echo "hk [-R] [-l logfile] [DIRECTORY]"
exit 1;
}

# Alepértelmezett értékek
DIRECTORY="."
RECURSIVE=1
HAVETOLOG=1;

# Paraméterek lekezelése
while [ $# -gt 0 ]; do
if [ $1 = "-R" ]; then
RECURSIVE=0
elif [ $1 = "-l" ]; then
HAVETOLOG=0;
shift
LOGFILENAME=$1
elif [ -d $1 ]; then
DIRECTORY=$1
else
errormsg
fi
shift
done

# nem rekurziv
if [ $RECURSIVE -eq 1 ]; then
for LINK in ` ls -log $DIRECTORY | grep ^l | awk '{print $6}' `;do
cd $DIRECTORY
test -e $LINK
a=$?
if test $a -eq 0
then
if [ $HAVETOLOG -eq 0 ];then
echo "$LINK symlink" >> $LOGFILENAME
fi
else
if [ $HAVETOLOG -eq 0 ];then
echo "$LINK not symbolic link and deleted" >> $LOGFILENAME
fi
rm $LINK
fi
done

else #rekurziv
touch output.txt
for LINK in ` ls -lRog $DIRECTORY | grep ^l | awk '{print $6}' `;do
for i in ` find $DIRECTORY $LINK | grep $LINK `;do
DIR=` dirname $i `
cd $DIR
test -e $LINK
a=$?
if test $a -eq 0
then
if [ $HAVETOLOG -eq 0 ];then
echo "$DIR/$LINK symlink" >> $LOGFILENAME
fi
else
rm $LINK
if [ $HAVETOLOG -eq 0 ];then
echo "$DIR/$LINK not symbolic link and deleted" >> $LOGFILENAME
fi
fi
done
done
fi
exit 0

a hibauzenet:
find: feladatok.txt: Nincs ilyen fájl vagy könyvtár

a problemam az hogy van egy fajlom(egy broken symbolic link), aminek tudom a nevét, de nem tudom az elérési útját, és kiszeretném torolni. Van erre parancs??
erre hasznaltam a find-ot és lehet hogy ez a hiba

amit keresek, torolni szeretnek, annak a nevet hova irjam?, ez leellenorzi hogy link -e?
"
#FIND_OPTS='-follow -type l' # ez pedig igen

find "$DIRECTORY" $FIND_OPTS | while read line ; do rm "$line"; done
"

Gtk2-Perl gond...

Szép estét!

A gondom a következő lenne... Összedobtam Gtk2::TreeStore, és Gtk2::TreeView segítségével egy directory tree-t... Na most ezt egy dialog ablakban kidobom. Amit szeretnék, az az lenne, hogy az ok gombra történő kattintás után ki tudjam szedni a treeview-ból, hogy melyik directory lett kiválasztva, de egyszerűen nem tudom, hogy bírjam rá, hogy valami infót adjon nekem... Egész konkrétan, ugye a neve kéne, meg az elérési útja...

Valakinek valami tipp???

Előre is köszi! :)

Python karakter kódolási probléma

Sziasztok!

Viszonylag kezdő vagyok Pythonba.
Van egy problémám, nevezetesen az, hogy egy python script az istennek se akar lefutni. Már mindent megpróbáltam amit a Google-n találtam de semmi. A programrészlet ez:


def add(nick, subject, body):
	subject = subject.encode('utf-8')
	body = body.encode('utf-8')
	conn = connect()

	# ....

	sql = "INSERT INTO news(uid,subject,body) VALUES ('%s', '%s', '%s')" % (nick, utils.escape(subject), utils.escape(body))
	cursor.execute(sql)
	cursor.close()
	conn.close()
	return True

	# ....

Az utils.escape ilyen kis egyszerű valami:


from xml.sax import saxutils
def escape(string):
	string = saxutils.escape(string)
	string = string.replace("'", "")
	string = string.replace("\x60", "`")
	return string

A teszt és a hibaüzi:


>>> subject="'Tárgytalan tárgy'"
>>> body = 'Sok-sok hosszú-hosszú szöveg a semmiről...'
>>> nick = 'hron'
>>> add(nick, subject, body)
/home/hron/public_html/gentoohu3/lib/news.py:78: Warning: Incorrect string value: '\xE1rgyta...' for column 'subject' at row 1
  cursor.execute(sql)
/home/hron/public_html/gentoohu3/lib/news.py:78: Warning: Incorrect string value: '\xFA-hoss...' for column 'body' at row 1
  cursor.execute(sql)

Plusz infó: a MySQL-be a végén bekerül a bejegyzés, csak ettől én még boldog nem leszek, mert az első ékezetes karakternél vág.

Tudom, hogy láma vagyok, és RTFM, de mutassatok rá arra a manualra, ahol ez sztájbarágósan le van írva... Bár konkrét példakódnak még jobban örülnék.

Pls, ne offoljátok szét...

shell scriptel más felhasználó beléptetése

Sziasztok!
A következőt szeretném megvalósítani:

  • user1 elindítja a konsolt
  • egy scriptet indítva belépteti a user2 felhasználót
  • jelszót automatikusan beolvassa (nem érdekelnek a biztosnági megfontolások, nincs internet, user1-nek eszébe sem jut megnézni a scriptet, sőt, nyugodtan tudhatná user2 jelszavát
  • utána én végrehajtatok bizonyos parancsokat user2 nevében

Suse10.2 alatt a KDE alatt, annak konsoljával próbálkozom, ha simán végre akarom hajtani, akkor azt írja: VÉGZETES: A TTY A művelet nem engedett jogosultságai nem módosíthatók
Igazság szerint nekem már az is megoldás lenne, ha user1 be tudna lépni a konsolról user2-ként és utána futtatna egy scriptet, de ez elegánsabbnak tűnne.
Ötlet?

Perl gondok

lenne egy kis problema ezzel a progival. server-cliens architecturat hasznal.
vegulis csomagokat kuld egy bizonyos IP cimere/portra. az egyetlen problema vele,
hogy ha megadok egy bizonyos idot nem addig kuldi a csomagokat a megadott intervalumnak megfeleloen,
hanem egyszerre mindent. esetleg egy Perl guru ranezne? koszi

server:
#!/usr/bin/perl -w

#
# VoIP Traffic Generator - Server
# Created By: Bruno Benchimol #
# Testado em:
# Linux - Debian 3.0 - perl v5.6.1
# FreeBSD 5.4 - perl v5.8
#
# Should work on any perl v5.x
#
# Version: v0.1b
#

use IO::Socket::INET;
use Getopt::Long;

print " >>>> VoIP Traffic Generator <<<<\n";
print " Server Mode - by Bruno Benchimol \n";

if (@ARGV < 1) {
print "Not enough parameters.\n\n";
print "Usage: --port, -p port to bind server\n";
exit(-1);
}

GetOptions("port|p=i" => \$port);

# Create a new socket
$Socket = new IO::Socket::INET->new (LocalPort=> $port,
Proto=> 'udp');
print "\nReady to accept connections on port $port...\n";

$count=0;
# never close server
while(1)
{
$Socket->recv($text,1470);
$count++;

# process summary information if status is found in msg
if($text =~ /status/)
{
($text, $packets) = split (/,/, $text);
# discard last packet since its a "summary packet" (small data)
$count--;
print "Packets expected: $packets\n";
print "Packets Received: $count\n";
$packetloss = ($packets - $count);
$packetlossperc = ($packetloss / $packets) * 100;
print "Packet Loss: $packetloss ($packetlossperc%)\n";
# reset packet counter
$count=0;
}
}

client:
#!/usr/bin/perl -w

# VoIP Traffic Generator - Client

# Created By: Bruno Benchimol

#

# Testado em:

# Linux - Debian 3.0 - perl v5.6.1

# FreeBSD 5.4 - perl v5.8

#

# Should work on any perl v5.x

#

# Version: v0.1b

use Time::HiRes qw(usleep ualarm gettimeofday);

use IO::Socket::INET;

use Getopt::Long;

print " >>>> VoIP Traffic Generator <<<<\n";

print " Client Mode - by Bruno Benchimol \n";

sub QueryStatistics

{

# Create a new socket

$Socket=new IO::Socket::INET->new (PeerPort=>$port,

Proto=>'udp',

PeerAddr=>$peer)

or die "Couldnt connect to host $peer on port $port using udp\n";

$smsg="status,$_[0]";

if(!$Socket->send($smsg))

{

print "Socket failed to send data !!!\n";

}

}

# Send 1 second burst!

sub SendBurst

{

# Create a new socket

$Socket=new IO::Socket::INET->new (PeerPort=>$port,

Proto=>'udp',

PeerAddr=>$peer)

or die "Couldnt connect to host $peer on port $port using udp\n";

$count_duration=0;

$duration = $_[0];

$count=0;

$pps=$_[1];

# calculte inter-packet time (in microseconds)

$sleep_time = (1/$pps)*100;

while($count_duration < $duration)

{

# reset inner counter so it will run again

$count = 0;

while($count < $pps)

{

if(!$Socket->send($msg))

{

print "Socket failed to send data !!!\n";

}

$count++;

# microseconds sleep time

Time::HiRes::usleep($sleep_time);

}

$count_duration++;

}

}

sub usage

{

print <

--size, -s payload size of udp packet (bytes)

--pps, -k packets per second

--time, -t time of the duration of test (seconds)

--streams, -m number of parallel connections (streams)

--port, -p port to connect

--host, -h ip to connect

END

}

## >>>>>> Main Program <<<<<

if (@ARGV < 6)

{

print "\nNot enough arguments.\n";

usage();

exit(-1);

}

# parameters

GetOptions ("size|s=i" => \$udp_payload_size,

"pps|k=i" => \$packet_per_second,

"time|t=i" => \$duration_test,

"streams|m=i" => \$maxfork,

"port|p=i" => \$port,

"host|h=s" => \$peer);

print "\nConnecting to $peer on $port, crafting UDP packets with payload of $udp_payload_size bytes, sending $packet_per_second packets per second, test will run for $duration_test seconds and has $maxfork streams. \n\n";

# udp payload size in bytes

$msg = "";

for ($i=0 ; $i < $udp_payload_size; $i++) {

$msg .= ".";

}

# expected number of packets to send

$totalpackets = $packet_per_second * $duration_test * $maxfork;

$ifork=0;

print "Spawning childrens processes ...\n";

while ($ifork < $maxfork)

{

if (fork) {

# parent do almost nothing

$ifork++;

} else {

# child send burst

&SendBurst($duration_test, $packet_per_second);

exit(0);

}

}

print "Waiting on childrens to finish ...\n";

print "Total Packets expected to be sent: " . $totalpackets;

# wait childrens to finish

wait();

print "\nTraffic Sent, now making server dump statistics on screen, wait...\n";

sleep(1);

&QueryStatistics($totalpackets);

print "Done, Check Server Screen.\n";

exit(0);

Bash szkript kérdés

Sziasztok!

A következő a problémám. Van egy text fájlom, amit fel kéne vinnem egy MySQL adatbázisba. A mezőket space választja el egymástól. A gond azonban az, hogy az utolsó mezőben (a mellékelt példában az IP cím után) vannak további space karakterek.
Hogyan lehetne megoldani, hogy azok egy mezőbe kerüljenek be?
Egy ilyen fájl itt található.

Előre is köszi a segítséget.

altalanos preporcesszor: gmac

Sziasztok

Korulbelul egy eve fejlesztgetek egy altalanos preprocesszort script irasi kepessegekkel felruhazva. A celja, hogy egy altalanos megoldast adjon olyan problemakra, amkor van egy karakteres input (szoveg, konfiguracio, barmi), es ebbol kell dinamikusan generalni barmit. Az egyszeru szovegbeillesztestol a bonyolult szamitasokig (ebben tobb mint mas makronyelvek).

Elonyei:
- dinamikus pipe-ok: a mukodese soran egy olyan dinamikus karakteres pipe jon letre, ami mukodes kozben tud uj pipe-reszt hozzaadni illetve megszuntetni.
- standard C, semmi extra. Mivel nem sok olyan kornyezet van, ahol ne lenne standard C fordito, igy eleg kornyezetfuggetlen.

Hatranyai:
- szokatlan gondolkozasmod, ugyanis ez minden, csak nem proceduralis nyelv. Azaz meg kell tanulni benne gondolkodni. Nem mintha bonyolult lenne, de hozza kell szokni.
- miutan nem tudtam mar megszokott szintaktiakt masolni, ezert folyton megprobalok kenyelmesebb/hasznalhatobb szintaxist kialakitani. Emiatt neha elegge atalakitom.

Remelem megtudom vele konnyiteni nehany ember eletet. Tovabba szivesen fogadnek otleteket es tanacsokat vele kapcsolatban.

Innet lehet letolteni:
http://sourceforge.net/project/showfiles.php?group_id=160876