Phyton auf Windows - Probleme mit sys.argv[xx]

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.
Antworten
Frank_Hanson
User
Beiträge: 5
Registriert: Dienstag 21. März 2006, 09:41

Hallo

Ich habe die dankbare Aufgabe erhalten einige funktionsfähige Skripts auf Windows zu implementieren. Jedoch bereitet mir Windows Probleme und bricht das Skript jedes Mal mit einem Syntax-Error ab, beim ersten sys.argv[2] ab. Kurz der Code:


Code: Alles auswählen

import sys
import os
if sys.argv[1] == '-port':
sql = "select * from HOSTS where PORT like " + "`" + sys.argv[2] + "`"
elif sys.argv[1] == '-name':
sql = "select * from HOSTS where HOST_ALIAS like " + "`" + sys.argv[2] + "`"
usw. usw.
else:
print "\n Nothing found for: " + sys.argv[2]

Hat jemand eine Idee? Danke für euren Support

Frank

Habs korrigiert ;)
Zuletzt geändert von Frank_Hanson am Dienstag 21. März 2006, 10:14, insgesamt 2-mal geändert.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Am Ende von Zeile 5 und 7 ist jeweils ein Gaensefuesschen zuviel. Das sieht man schon an der Farbgeung des Syntax-Highlighting.

Da kann Windows nun wiklich nix fuer! :wink:
Frank_Hanson
User
Beiträge: 5
Registriert: Dienstag 21. März 2006, 09:41

Huch, nun trotz einem Gänsefüsschen weniger kommt dieser Text in der Shell

sql = "select * from HOSTS where PORT like " + "`" + sys.argv[2] + "`"

Syntax Error: Invalid Syntax


Das ^ ist unter dem 'g' von argv.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Wie wärs mit Einrückung? Die ist nicht korrekt.
--- Heiko.
Frank_Hanson
User
Beiträge: 5
Registriert: Dienstag 21. März 2006, 09:41

Wie ist das gemeint? Unter RedHat funktioniert es einwandfrei.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mach doch sowas:

Code: Alles auswählen

port = sys.argv[2]
print port
sql = "select * from HOSTS where PORT like `%s`"  % port
Dir ist aber schon klar, das man generell so keine SQL-Statements zusammen bauen sollte, ja?

Aus http://wiki.python.de/Thema_Sicherheit#Tipps
Zum Vermeiden von SQL-Injections sollte man zuerst die SQL Escaping Funktion des Datenbank Moduls verwenden. Wie das geht steht unter Parametrisierte SQL Queries.
http://wiki.python.de/Parametrisierte_SQL_Queries

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Frank_Hanson hat geschrieben:Jedoch bereitet mir Windows Probleme und bricht das Skript jedes Mal mit einem Syntax-Error ab, beim ersten sys.argv[2] ab.

Code: Alles auswählen

import sys
import os
if sys.argv[1] == '-port':
sql = "select * from HOSTS where PORT " + "`" + sys.argv[2] + "`"
elif sys.argv[1] == '-name':
Hi Frank!

Ich sehe hier einige Backticks (`) im Code. Tausche die doch mal gegen
einfache Anführungszeichen (') aus.

mfg
Gerold
:-)

Edit: Schei... - die Einrückung hatte ich übersehen. :-(
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dein Post enthielt keinerlei Einrückung, sprich:

Code: Alles auswählen

if blah:
blubb()
Das führt zwangsläufig zu einem SyntaxError. Da Du nirgends (wirklich) deutlich gemacht hast dass Du nicht den Code postest den Du probierst auszuführen konnte ich zumindest in meiner Kristallkugel nicht drauf kommen dass Du tatsächlich schon funktionierenden Code hast. Nächstes mal echten Code posten, kein Pseudocode.
--- Heiko.
Frank_Hanson
User
Beiträge: 5
Registriert: Dienstag 21. März 2006, 09:41

Hab ich angepasst, jedoch ohne nennenswerte Verbesserung!
gerold hat geschrieben:
Frank_Hanson hat geschrieben:Jedoch bereitet mir Windows Probleme und bricht das Skript jedes Mal mit einem Syntax-Error ab, beim ersten sys.argv[2] ab.

Code: Alles auswählen

import sys
import os
if sys.argv[1] == '-port':
sql = "select * from HOSTS where PORT " + "`" + sys.argv[2] + "`"
elif sys.argv[1] == '-name':
Hi Frank!

Ich sehe hier einige Backticks (`) im Code. Tausche die doch mal gegen
einfache Anführungszeichen (') aus.

mfg
Gerold
:-)

Edit: Schei... - die Einrückung hatte ich übersehen. :-(
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Poste doch mal bitte genau den Code den Du probierst auszuführen... Oder noch besser: stell das Ding auf einer Webseite zur Verfügung. Es kann nämlich durchaus sein, dass der Code den Du jetzt mehrfach gepostet hast nicht der Code ist den Du probierst auszuführen. Es wäre nix neues wenn wir uns hier einen Wolf raten, aber im Endeffekt es schlicht und ergreifend daran liegt dass nicht der echte Code gepostet wurde, sondern der Schreiber probiert hat den Code anzupassen um ihn zu posten, und dadurch implizit den Fehler korrigiert hat...

Sonst: Du siehst wie "kristallkugelmäßig" hier vorgegangen wird. Das bringt Dir wirklich nix...
--- Heiko.
Frank_Hanson
User
Beiträge: 5
Registriert: Dienstag 21. März 2006, 09:41

Das mit dem Einfügen wars. Windows hat die 'Formatierungen' nicht 1:1 von Linux übernommen. Es funktioniert nun einwandfrei.

Danke für eure Hilfe!
Antworten