python skript mit shebang starten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
B0ysc0ut
User
Beiträge: 5
Registriert: Freitag 14. November 2008, 15:44

python skript mit shebang starten

Beitragvon B0ysc0ut » Samstag 15. November 2008, 04:45

hallo leute.

bin letztens auf nen kleinen python websniffer gestoßen den ich selber bissl erweitern will.

hier mal schnell der code:
[code=]#!/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"
[/code]

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:
[code=]#!/usr/bin/python

print "Hello World!"
[/code]
funktioniert der shebang auch.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Samstag 15. November 2008, 06:35

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

Code: Alles auswählen

#! /usr/bin/python


die Zeile

Code: Alles auswählen

#! /usr/bin/env python


zu verwenden, so dass der Python-Interpreter ggf. auch gefunden wird, falls er nicht in /usr/bin liegt.
BlackJack

Beitragvon BlackJack » Samstag 15. November 2008, 08:52

Ich würde mal darauf tippen, dass die Datei Windowszeilenenden statt Linuxzeilenenden enthält.
farid
User
Beiträge: 95
Registriert: Mittwoch 8. Oktober 2008, 15:37

She-bang

Beitragvon farid » Samstag 15. November 2008, 17:04

numerix hat geschrieben:Grundsätzlich solltest du dir aber angewöhnen, an Stelle von

Code: Alles auswählen

#! /usr/bin/python


die Zeile

Code: Alles auswählen

#! /usr/bin/env python


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.
B0ysc0ut
User
Beiträge: 5
Registriert: Freitag 14. November 2008, 15:44

Beitragvon B0ysc0ut » Samstag 15. November 2008, 21:20

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!
BlackJack

Beitragvon BlackJack » Samstag 15. November 2008, 22:45

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.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Samstag 15. November 2008, 22:53

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.
B0ysc0ut
User
Beiträge: 5
Registriert: Freitag 14. November 2008, 15:44

Beitragvon B0ysc0ut » Montag 17. November 2008, 22:03

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:
[code=]'\xef\xbb\xbf#!usr/bin/python\r\n'[/code]

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?
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Beitragvon Zap » Montag 17. November 2008, 22:24

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.
B0ysc0ut
User
Beiträge: 5
Registriert: Freitag 14. November 2008, 15:44

Beitragvon B0ysc0ut » Montag 17. November 2008, 22:37

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?
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Montag 17. November 2008, 22:45

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.
lunar

Re: She-bang

Beitragvon lunar » Montag 17. November 2008, 22:47

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?
B0ysc0ut
User
Beiträge: 5
Registriert: Freitag 14. November 2008, 15:44

Beitragvon B0ysc0ut » Montag 17. November 2008, 23:04

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!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 17. November 2008, 23:18

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``.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Montag 17. November 2008, 23:37

Immer so Dinge, mit denen man nicht rechnet :? :)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]