Taugt Python als CGI-Script? Oder doch lieber Perl?
-
Taugt Python als CGI-Script? Oder doch lieber Perl?
Auf dem Server gibt es einen Python interpreter ( bei einer ssh session hab ich mal "python" eingegeben, da ist ein python Interpreter vorhanden )
Da hab ich mir gedacht: Was ist für sowas bessere geeignet? Das altbewährte Perl oder das noch recht neue Python?
MfG, CGI-Schlange
-
gibt da ganz nette sachen, die cgi nochmal kapseln, zB WSGI
siehe auch http://wiki.python.de/Python_im_Webalso ja, aufjedenfall python.
-
cgi-mausi schrieb:
gibt da ganz nette sachen, die cgi nochmal kapseln, zB WSGI
siehe auch http://wiki.python.de/Python_im_Webalso ja, aufjedenfall python.
Danke.
Python erscheint mir immer sympatischer.
Aber mal sehen wie es mit sachen wie sockets aussieht. Darauf kommt es mir nämlich an. bei Python sidn doch die ganzen Socketangelegenheiten auch plattformübergreifend, oder?
-
Sind plattformübergreifend.
So neu ist Python ja auch nicht. Laut Wikipedia "Anfang der 1990er". Perl wurde laut Wikipedia 1987 entwickelt
Ich persönlich würde eher Python als Perl nehmen, da Pyhton-Code nach meiner Meinung leserlicher ist.
-
kingruedi schrieb:
Sind plattformübergreifend.
So neu ist Python ja auch nicht. Laut Wikipedia "Anfang der 1990er". Perl wurde laut Wikipedia 1987 entwickelt
Ich persönlich würde eher Python als Perl nehmen, da Pyhton-Code nach meiner Meinung leserlicher ist.
Bin gerade dabei python zu erlernen.
ps: Für mich erscheint der Abstand von ende Achtziger bis Anfang neunziger ganz lang. Denn die Neunziger waren grad da und die Achtziger sind weeiit weeiit weg.
Deswegen ershcien mir python als neu.
-
Ich mach's mir einfach und zitier kurz von einem Artikel namens Network Programming with Perl:
*Perl has been called the glue that holds the Internet together because it is an extremely powerful text processing and CGI programming language. (...) One area in which Perl has shown its power is that of network programming.
Perl makes network programming easy by providing built-in functions that can be used to create low-level client/server programs from scratch. Also, many modules are freely available that make programming common networking tasks simple and quick. These tasks include pinging remote machines, TELNET and FTP sessions. (...)*
Was das konkret in Perl heißt, ist:
"use Socket" und du kannst dich mit Sockets austoben.
"use CGI" und du kannst dich mit CGI austoben.Es gibt nichts, was es in Perl nicht gäbe. Einfach überlegen was du suchst, in CPAN eingeben, dir ein Paket aussuchen und fertig. Perl kommt mit einer automatischen Erweiterungsfähigkeit daher. Unter Windows (ActivePerl) einfach "ppm" eingeben und unter Linux (Ubuntu) einfach "cpan". Danach "install DEIN_PAKETNAME" und voila. CPAN hat wohl wirklich alles.
Als Beispiel, du willst Google Maps verwenden? Also Suchbegriffe "google maps" eingeben und CPAN spuckt "Geo::Google" als Modulname aus. Also schnell "cpan", "install Geo::Google" eingetippt und schwupps, schon kannst in Perluse Geo::Google; $geo = Geo::Google->new(); $geo->location(address => '695 Charles E Young Dr S, Westwood, CA 90024');
schreiben um die Koordinaten von der Adresse 695 Charles E Young Dr S, Westwood, CA 90024 zu ermitteln.
Du kannst natürlich auch plattformunabhängig Low-Level mit Sockets arbeiten:
use IO::Socket; $sock = new IO::Socket::INET(PeerAddr => 'www.c-plusplus.net', PeerPort => 80, Proto => 'tcp'); print $sock "Ich tobe mich jetzt mit HTTP aus\r\n\r\n"; print scalar <$sock>; # Antwort vom Server close $sock;
Wer's gern bissl komfortabler hat, kann auch gleich:
use HTTP::Lite; $http = new HTTP::Lite; $http->request("http://www.c-plusplus.net/"); print $http->body();
schreiben.
Egal was du willst, HTTP, FTP, SMTP, POP3, IMAP, SSH, Telnet, ... kein Problem, für alles gibt's schon Perl-Module, die du verwenden kannst. Falls du aber keine bequemen und einfachen Module verwenden willst, kannst du dich natürlich auch auf unterster Ebene austoben. Und zwar so richtig (z.B. "NetPacket::IP - Assemble and disassemble IP packets", "NetPacket::Ethernet - Assemble and disassemble ethernet packets")
Was ich damit sagen will: Perl ist der Hammer
-
Perl ist verfrickelt bis zum Geht nicht mehr. Lisp ist das einzig Wahre!
-
minhen schrieb:
Was ich damit sagen will: Perl ist der Hammer
Ist doch bei Python, Ruby und vielen anderen Script/Programmiersprachen genauso.
-
Dieser Thread wurde von Moderator/in Marc++us aus dem Forum Rund um die Programmierung in das Forum Webzeugs verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
kingruedi schrieb:
Ist doch bei Python, Ruby und vielen anderen Script/Programmiersprachen genauso.
Nicht dass ich bisher etwas anderes behauptet hätte (
), aber zeig mir doch mal etwas mit CPAN vergleichbares für Python. CPAN heißt immerhin über 10.000 Module, auf die man ohne Probleme mit einem einfachen "install Paketname" zugreifen kann. Viele Module sind ohnehin schon bei den Perl-Distributionen dabei. Oder machen wir's anders: zeig doch einfach mal, wie man in Python die Koordianten eines beliebigen Ortes ermittelt. Mit Perl hat man's in unter einer Minute. Hab ich ja schon gezeigt
-
Hallo!
Ja, Perl ist sicher gut, wie Python/Ruby auch. Perl profitiert heute unter anderem davon, daß sein Durchbruch rund 10 Jahre früher als der von Python/Ruby kam, und daher 10 Jahre lang als "application glue"-Sprache praktisch konkurrenzlos war.
Ruby und Python sind dennoch konzeptionell moderner als Perl, auch wenn sie nur ein paar Jahre jünger sind: Python, weil diese Sprache konsequent auf Leicht-Verständlichkeit und "principle of least surprise" hin ausgerichtet ist
("machine-readable pseudo-code") und Ruby, weil es eine (fast) reine OO-Sprache ist und ebenso das "principle of least surprise" verkörpert.Ich würde sagen, wir warten einfach 10 Jahre und sehen dann, wie populär
Perl,Python und Ruby sind und wie viele Packages es jeweils gibt.
Ende der 80er Jahre schien Cobol noch unschlagbar.Grüße
-
ein kleines beispiel mit python + cgi:
http://www.artima.com/weblogs/viewpost.jsp?thread=168625so jetzt sind die perl verfechter wieder dran :p
-
cgi-mausi schrieb:
ein kleines beispiel mit python + cgi:
http://www.artima.com/weblogs/viewpost.jsp?thread=168625so jetzt sind die perl verfechter wieder dran :p
Werkzeug ist Werkzeug, aber wenn du unbedingt Python/Perl vergleichen willst ...
Hier der Python-Code aus dem Link mit entsprechendem Perl-Code gegenübergestellt.
Python:
import cgitb; cgitb.enable()
Perl:
use CGI::Carp qw(fatalsToBrowser);
Python:
form = cgi.FieldStorage()
Perl:
@form = $cgi->param();
Python:
for name, value in { "name1" : "value1", "name2" : "value2", "name3" : "value3", "name4" : "value4", "name5" : "value5", }.items(): form.list.append(cgi.MiniFieldStorage(name, value))
Perl:
$cgi = new CGI(INPUTFILE); oder $cgi = new CGI(\*STDIN); oder $cgi = new CGI({name1 => value1, name2 => value2});
Die INPUTFILE-Variante liest die Parameter aus einer Datei aus. Diese hat dabei Zeilen der Form name1=value1. Bei STDIN das selbe, nur dass jetzt von der Standardeingabe gelesen wird. Die letzte Variante initialisiert die CGI-Parameter anhand eines (in dem Fall anonymen) Hashs.
Wenn du willst kannst du die Parameter auch mit $cgi->param() ändern oder setzen. Einfach aufrufen und die zu setzenden Werte übergeben.Und wenn wir schon dabei sind:
Also, you can run a Python CGI on the command line to detect syntax errors. But there isn't a built-in approach to feed test variables into a CGI
gilt anscheinend für Python. Aber nicht für Perl. Wenn dir obige Möglichkeiten in Perl nicht gefallen, kannst du dein Perl-CGI noch immer auch so aufrufen:
your_script.pl keyword1 keyword2 keyword3 oder your_script.pl name1=value1 name2=value2 oder your_script.pl keyword1+keyword2+keyword3 oder your_script.pl name1=value1&name2=value2 oder sogar your_script.pl /your/path/here?name1=value1&name2=value2
Python:
runningOnServer = "website" not in os.getcwd()
Perl:
$runningOnServer = getcwd() !~ /website/;
Python:
os.getcwd().find("website") != -1
Perl:
getcwd() =~ /website/
Python:
def error(msg): print "Content-type: text/html" print print "Error:", msg sys.exit() if not runningOnServer: def error(msg): print "Error:", msg sys.exit()
Perl:
$SIG{__DIE__} = sub { print "Content-type: text/html\n"; print "Error:", $_[0]; exit; }; $SIG{__DIE__} = sub { print "Error:", $_[0]; exit; } unless $runningOnServer;
Ich sehe ja, dass du Python ganz furchtbar schrecklich toll findest. Aber gerade bei CGI würde ich es mir zweimal überlegen Perl anzugreifen. Es kommt schließlich nicht von ungefähr, dass Perl die Standard-CGI-Sprache ist.
Such dir lieber einen anderen "Angriffspunkt". Z.B. die Syntax wie kingruedi. Da haste größere Erfolgschancen - obgleich ich Perl nicht kryptischer als z.B. C finde. Ist halt einfach Geschmackssache. Und in welcher Sprache man weniger tippen muss, sieht man ja schon an den Beispielen hier
Auch wenn es hart klingt, aber die Welt ist eben größer als Python und größer als "nur eine Programmiersprache für alle Zwecke"