Seite 1 von 1
python skript mit shebang starten
Verfasst: Samstag 15. November 2008, 04:45
von B0ysc0ut
hallo leute.
bin letztens auf nen kleinen python websniffer gestoßen den ich selber bissl erweitern will.
hier mal schnell der code:
Code: Alles auswählen
#!/usr/bin/python
"""WEBSNIFFER"""
import httplib
import string
import os
opera = { "User-Agent":"Opera/9.20 (Windows NT 6.0; U; en)",
"Accept-Charset":"ISO-8859-1, UTF-8; q=0.7, *; q=0.7",
"Cache-Control":"no",
"Accept-Language":"de, en; q=0.7, en-us; q=0.3",
"Referer":"http://www.google.de" }
domain = 'www.harlekin-bowling.de'
path = '/'
method = 'GET'
params = None
profile = opera
conn = httplib.HTTPConnection (domain)
conn.request (method, path, params, profile)
stat = conn.getresponse()
headers = stat.getheaders()
version = stat.version
status = stat.status
reason = stat.reason
data = stat.read()
conn.close()
file_name = domain.replace (".", "-")
file_object = open (file_name, "w")
file_object.write (data)
file_object.close()
print "\n"
print "WEBSNIFFER 0.1"
print 20 * "-"
print "\n"
print "Header (Client)"
print 20 * "-"
for key, value in profile.iteritems():
print "%s \t %s" % (key, value)
print 20 * "-"
print "\n"
print "Header (Server)"
print 20 * "-"
print "HTTP \t %s" % (version)
print "Status \t %s (%s)" % (status, reason)
for key, value in headers:
print "%s \t %s" % (key, value)
print 20 * "-"
print "\n"
print "Quelltext - geschrieben in file:"
print file_name
print 20 * "-"
print "\n"
nun zu meinem problem: ich rufe das skript auf der konsole mit "./websniffer.py" auf. durch den shebang sollte es funktioniern. leider werden mir fehlermeldungen ausgegeben:
: No such file or directory1: #!/usr/bin/python
: command not foundy: line 2:
: command not foundy: line 3: programmbeschreibung
: command not foundy: line 4:
./websnifferStart.py: line 5: import: command not found
./websnifferStart.py: line 6: import: command not found
./websnifferStart.py: line 7: import: command not found
: command not foundy: line 8:
denke daran kann man deutlich sehen dass das prog nicht interpretiert wird durch den python interpreter. rufe ich das skript mit "python websniffer.py" auf funktioniert es wunderbar! auch jemand anders hat das bei sich getestet u es hat wunderbar geklappt.
/usr/bin/python zeigt bei mir auf /usr/bin/python2.5.
könnt ihr mir bitte helfen? warum funktioniert der shebang nicht?
ach ja...bei:
funktioniert der shebang auch.
Verfasst: Samstag 15. November 2008, 06:35
von numerix
Warum das Shebang beim ersten Code nicht funktioniert und beim zweiten doch, erschließt sich mir nicht.
Grundsätzlich solltest du dir aber angewöhnen, an Stelle von
die Zeile
zu verwenden, so dass der Python-Interpreter ggf. auch gefunden wird, falls er nicht in /usr/bin liegt.
Verfasst: Samstag 15. November 2008, 08:52
von BlackJack
Ich würde mal darauf tippen, dass die Datei Windowszeilenenden statt Linuxzeilenenden enthält.
She-bang
Verfasst: Samstag 15. November 2008, 17:04
von farid
numerix hat geschrieben:Grundsätzlich solltest du dir aber angewöhnen, an Stelle von
die Zeile
zu verwenden, so dass der Python-Interpreter ggf. auch gefunden wird, falls er nicht in /usr/bin liegt.
Kann ich nur unterstuetzen! Es gibt neben den BSDs auch andere unixoide-systeme, die nicht das Layout von Linux befolgen, und Python z.B. unter /usr/local/bin, /vol/bin usw. abstellen. Ausserdem kann man so zur Laufzeit (mit PATH) eine eigene Python-Version aussuchen.
Verfasst: Samstag 15. November 2008, 21:20
von B0ysc0ut
hallo zusammen,
danke für eure antworten!
also mit "/usr/bin/env python" hast du recht. das muss ich mir angewöhnen.
beide varianten funktionieren nicht. u ich verstehe selbst nicht warum der shebang bei einem anderen prog funktioniert. erschließt sich mir auch nicht.
das mit den windowszeilenende hatte ich mir au scho überlegt....weil ich es tatsächlich unter windoof zsgeschrieben habe. hab es dann nomml komplett abgeschrieben bei mir daheim (debian lenny). leider das gleiche verhalten!
Verfasst: Samstag 15. November 2008, 22:45
von BlackJack
Hast Du Dir die Datei mal in einem Hexeditor angesehen? Oder mal die erste Zeile mit Python und der `repr()`-Funktion? Ich tippe wirklich ganz stark auf Windowszeilenenden oder irgendwelche anderen unsichtbaren Steuerzeichen.
Verfasst: Samstag 15. November 2008, 22:53
von str1442
Oder probier mal sed -e "s/\r\n/\n/g" -i dateiname
Wenns dann nicht funktioniert, schau dir die Datei mittels xxd an. "a0" ist der "\n" in hex.
EDIT: Tschuldigung, "0A" ist der \n, nicht a0.
Verfasst: Montag 17. November 2008, 22:03
von B0ysc0ut
hallo,
ich glaube ihr habt recht gehabt. habe die datei aus der python-shell heraus mal eingelesen u mir die erste zeile ausgeben lassen. hier das ergebniss:
ich versteh zwar die ersten 3hexzahlen ned aber ich denke das "\r\n" ist gleichbedeutend mit CR LF oder? das ist also tatsächlich das windows-dateiende.
mit was muss ich denn die datei öffnen um das zu bearbeiten?
Verfasst: Montag 17. November 2008, 22:24
von Zap
Ich bin leider schon lange nicht mehr mit ner bash in Berührung gekommen, aber ich meine das ich in Fedora Core

ein Tool namens dos2unix an board hatte. Das konnte sowas beheben.
Verfasst: Montag 17. November 2008, 22:37
von B0ysc0ut
habe tofrodos gefunden...mit "fromdos program.py" hat es dann die zeilenenden geändert. hab ich danach überprüft.
leider zeigt das skript immer noch das gleiche verhalten wie davor....
was bedeuten denn die 3hex-zahlen die vor dem shebang stehen?
Verfasst: Montag 17. November 2008, 22:45
von str1442
Datenmüll. Entfernen mit einem Hex Editor. Die Datei war nicht zufällig vorher in irgendeinem tollen Format gespeichert, wie zb RTF? Schau dir mal den Rest der Datei an.
Re: She-bang
Verfasst: Montag 17. November 2008, 22:47
von lunar
farid hat geschrieben:Kann ich nur unterstuetzen! Es gibt neben den BSDs auch andere unixoide-systeme, die nicht das Layout von Linux befolgen, und Python z.B. unter /usr/local/bin, /vol/bin usw. abstellen.
Der FHS gilt größtenteils auch für Unix, und Free-, Net- und OpenBSD nutzen alle /usr/bin. Kein vernünftiges Unix legt python als /vol/bin/python ab.
Ausserdem kann man so zur Laufzeit (mit PATH) eine eigene Python-Version aussuchen.
Niemand nutzt "/usr/bin/env perl" oder "/usr/bin/env bash" aus diesen Gründen, warum also muss man das bei Python tun?
Verfasst: Montag 17. November 2008, 23:04
von B0ysc0ut
hallo zusammen,
also hab mir das mitm hex-editor nomml angeguckt u die ersten 3 zeichen entfernt....u hab danach beim ausführen gemerkt woran es gescheitert ist....ich hab in der IDLE UTF-8 eingesteltt....aber mein restliches system ist nicht auf unicode umgestellt....
danke an alle die geholfen haben!
Verfasst: Montag 17. November 2008, 23:18
von Leonidas
str1442 hat geschrieben:Datenmüll. Entfernen mit einem Hex Editor. Die Datei war nicht zufällig vorher in irgendeinem tollen Format gespeichert, wie zb RTF? Schau dir mal den Rest der Datei an.
Nein, EF BB BF ist das
UTF-8 Byte Order Mark, das einige Windows-Editoren (überflüssigerweise) in Dateien reinschreiben und mit denen viele Unix-Tools und Kernel nicht umgehen können. Man kann es problemlos entfernen.
lunar, Python ist auf den Solaris-Kisten in der Rechnerhalle unter ``/usr/sfw/bin/python`` zu finden (und das ist noch bei weitem nicht der dümmste Pfad wo man Applikationen findet, es gibt noch reihenweise Sachen die nichtmal in PATH eingetragen sind). Perl ist in ``/usr/bin/perl`` und Bash in ``/bin/bash``.
Verfasst: Montag 17. November 2008, 23:37
von str1442
Immer so Dinge, mit denen man nicht rechnet

Verfasst: Montag 17. November 2008, 23:48
von lunar
Leonidas hat geschrieben:lunar, Python ist auf den Solaris-Kisten in der Rechnerhalle unter ``/usr/sfw/bin/python`` zu finden (und das ist noch bei weitem nicht der dümmste Pfad wo man Applikationen findet, es gibt noch reihenweise Sachen die nichtmal in PATH eingetragen sind).
Ich bezweifele, dass "/usr/sfw/bin/python" der Standardpfad unter Solaris ist. Außerdem sind diese Systeme nicht gerade ein Beispiel für gute Administration
Leonidas hat geschrieben:Bash in ``/bin/bash``.
Code: Alles auswählen
[lunar@eddie on pts/0] - [17. November 2008, 23:45:21] >> ~/test
--> ssh xxx@rayhalle1.informatik.tu-muenchen.de which bash
Password:
/usr/bin/bash
Und das ist bei Unix-Derivaten sogar eher Regel denn Ausnahme, da die Bash bei Unix-Systemen eigentlich eher unüblich ist und daher meistens nicht als Systemshell installiert wird, sondern als ganz gewöhnliche Software unter /usr/bin oder /usr/local/bin.
Re: She-bang
Verfasst: Dienstag 18. November 2008, 03:13
von farid
lunar hat geschrieben:Der FHS gilt größtenteils auch für Unix, und Free-, Net- und OpenBSD nutzen alle /usr/bin. Kein vernünftiges Unix legt python als /vol/bin/python ab.
Nein, unter BSD wird thrid-party software unter /usr/local/bin abgelegt. Der Python-Port tut naemlich genau das, genauso wie alle anderen Ports. Unter /usr/bin befindet sich nur das Userland von BSD selbst, und dazu zaehlen nicht die Interpreter (auch nicht Python).
"#!/usr/bin/env python" IST die kanonische She-bang Zeile, und das aus gutem Grund.

Re: She-bang
Verfasst: Dienstag 18. November 2008, 11:42
von lunar
farid hat geschrieben:Nein, unter BSD wird thrid-party software unter /usr/local/bin abgelegt. Der Python-Port tut naemlich genau das, genauso wie alle anderen Ports. Unter /usr/bin befindet sich nur das Userland von BSD selbst, und dazu zaehlen nicht die Interpreter (auch nicht Python).
Das wusste ich nicht. Mich würde dann allerdings mal interessieren, wo dann "bash" und "perl" liegen ...