Seite 1 von 1

wie löse ich das Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 11:41
von JKR
Hi,

wenn ich bestimmte Zeichen als Übergabeparameter verwende, wendet Python seine Logik für escape Characters an - was ich aber nicht will !

Mein Bsp. skript parameter: "C:\Ordner 1\" "D:\test 2\"

Code: Alles auswählen

import sys
if len(sys.argv) > 1:    
    print(sys.argv[1])
    print(sys.argv[2])
Als Ergebnis bekomme ich dann ...
C:\Users\Jkr\AppData\Local\Programs\Python\Python37-32\python.exe E:/test.py "C:\Ordner 1\" D:\test" 2\"
C:\Ordner 1" D:\test
2"

Wie man sieht "zerreißt" es die beiden argumente an der falschen stelle ... weil es sollte folgendes kommen:
C:\Ordner 1\
D:\test 2\

Python soll mir einfach die Strings die ich ihm als Übergabeparameter gebe unverändert weiterreichen - ohne ev. escape characters zu berücksichtigen !

Re: wie löse ich gas Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 11:55
von Sirius3
Du zeigst den falschen Code. Das Problem liegt ja an der Stelle, an der Du dieses Skript aufrufst.

Wenn Du per subprocess ein anderes Python-Programm aufrufst, machst Du eh wahrscheinlich etwas falsch, da es einfacher ist, etwas als Modul zu importieren und direkt aufzurufen.

Re: wie löse ich gas Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 11:55
von __deets__
Tut es auch nicht. Escaping hat NICHTS mit string-Objekten zu tun, sondern bezieht sich *ausschliesslich* auf Stringliterale, also das Vorkommen von in Anführungszeichen gesetzten Zeichenketten im Programmtext. Python verändert also nichts an sys.argv, sondern überführt exakt die im C-main-call definierten argv/argv-Argumente in strings, ohne Wandlung (jenseits eines Dekodierens von Bytes zu einem String, da passiert aber auch kein Escaping).

Der Übeltäter hier ist außerhalb. Ich vermute er sitzt vorm Keyboard und die Argumente falsch angegeben. Dazu müsste man den exakten Aufruf in der Shell sehen. Hier wäre sogar mal ausnahmsweise ein Screenshot angebracht.

Re: wie löse ich gas Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 12:05
von Dennis89
Hallo,

wenn ich hier unter Fedora das Skript im Terminal laufen lasse, dann bekomme ich die gleiche Ausgabe:

Code: Alles auswählen

[dennis@dennis ~]$ python skript.py "C:\Ordner 1\" "D:\test 2\"
C:\Ordner 1" D:test
2"
Wenn ich aber die " in ' ersetze, dann gehts:

Code: Alles auswählen

[dennis@dennis ~]$ python skript.py 'C:\Ordner 1\' 'D:\test 2\'
C:\Ordner 1\
D:\test 2\
Gibt es dafür eine Erklärung?

Grüße
Dennis

Re: wie löse ich gas Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 12:22
von JKR
__deets__ hat geschrieben: Freitag 8. September 2023, 11:55 Tut es auch nicht. Escaping hat NICHTS mit string-Objekten zu tun, sondern bezieht sich *ausschliesslich* auf Stringliterale, also das Vorkommen von in Anführungszeichen gesetzten Zeichenketten im Programmtext. Python verändert also nichts an sys.argv, sondern überführt exakt die im C-main-call definierten argv/argv-Argumente in strings, ohne Wandlung (jenseits eines Dekodierens von Bytes zu einem String, da passiert aber auch kein Escaping).

Der Übeltäter hier ist außerhalb. Ich vermute er sitzt vorm Keyboard und die Argumente falsch angegeben. Dazu müsste man den exakten Aufruf in der Shell sehen. Hier wäre sogar mal ausnahmsweise ein Screenshot angebracht.
Ich habe das Programm etwas abgeändert um besser zu zeigen wo mein Problem liegt ... hoffe es ist jetzt verständlicher ... den zweiten Übergabeparameter möchte ich verwenden - und dieser sollte bei der Ausgabe sein:
D:\test 2\

Code: Alles auswählen

import sys
if len(sys.argv) > 1:
    mein_pfad_2 = sys.argv[2]
    print(mein_pfad_2)
Das Ergebnis ist dann:
2"

Leider konnte ich keine Screenshots mehr dazu geben ... kann meinen Post nicht mehr editieren und in den Antworten finde ich keine Funktion um welche hochzuladen :(

Re: wie löse ich das Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 12:34
von __deets__
Screenshots muss man ueber imgur zB anlegen, und dann hier verlinken.

Und dein Problem ist schon verstanden worden. Es stimmt eben nur nicht, was du da schlussfolgerst. Python's Escaping kommt dir hier nicht in die quere, der Fehler liegt beim Aufruf.

Re: wie löse ich das Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 12:37
von narpfel
__deets__ hat richtig geraten: Der Aufruf in der Shell ist falsch. `\"` ist für die Shell ein escapetes Anführungszeichen und nicht das Ende des Strings. Am einfachsten wäre wohl, einfach forward slashes zu benutzen. Oder du musst recherchieren, wie Escapes in deiner Shell funktionieren und das dementsprechend richtig machen.

Re: wie löse ich gas Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 12:42
von JKR
Dennis89 hat geschrieben: Freitag 8. September 2023, 12:05 Hallo,

wenn ich hier unter Fedora das Skript im Terminal laufen lasse, dann bekomme ich die gleiche Ausgabe:

Code: Alles auswählen

[dennis@dennis ~]$ python skript.py "C:\Ordner 1\" "D:\test 2\"
C:\Ordner 1" D:test
2"
Wenn ich aber die " in ' ersetze, dann gehts:

Code: Alles auswählen

[dennis@dennis ~]$ python skript.py 'C:\Ordner 1\' 'D:\test 2\'
C:\Ordner 1\
D:\test 2\
Gibt es dafür eine Erklärung?

Grüße
Dennis

Ich verwende eine Windows Maschine ... da ist es leider egal welches Hochkomma - einfach oder doppelt - ich verwende, bekomme immer das falsche :?

Meinen Besten Dank auch an @Dennis89 dass du mein Programm ausprobiert hast ! thx a lot !!!!

Re: wie löse ich das Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 12:49
von __deets__
imonbln hat's schon gesagt: du escapest *IN DER SHELL* ein schliessendes Hochkomma, indem du schreibst

Code: Alles auswählen

"C:\ein\pfad\" dann kommt was anderes  und irgendwann das schliessende hochkomma"
Das \" ist NICHT der Pfadtrenner, gefolgt vom Ende des Strings. Sondern eben - escaped - ein ". Die Shell macht also das naechste Argument erst spaeter "auf".

Re: wie löse ich das Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 12:54
von JKR
__deets__ hat geschrieben: Freitag 8. September 2023, 12:34 Screenshots muss man ueber imgur zB anlegen, und dann hier verlinken.

Und dein Problem ist schon verstanden worden. Es stimmt eben nur nicht, was du da schlussfolgerst. Python's Escaping kommt dir hier nicht in die quere, der Fehler liegt beim Aufruf.
Tja, wie schön dass das endlich mal einer verständlich ausgedrückt hat - an das hab ich gar nicht gedacht dass die shell Schuld is :(

Re: wie löse ich das Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Freitag 8. September 2023, 13:00
von __deets__
JKR hat geschrieben: Freitag 8. September 2023, 12:54 Tja, wie schön dass das endlich mal einer verständlich ausgedrückt hat - an das hab ich gar nicht gedacht dass die shell Schuld is :(
Ist das dein Ernst? Das habe ich in meiner ersten Antwort schon nahegelegt.. da darfst du dir durchaus mal selbst an den Kopp packen, wann hier "endlich" was passiert ist.

Re: wie löse ich das Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Donnerstag 14. September 2023, 09:45
von JKR
__deets__ hat geschrieben: Freitag 8. September 2023, 13:00
JKR hat geschrieben: Freitag 8. September 2023, 12:54 Tja, wie schön dass das endlich mal einer verständlich ausgedrückt hat - an das hab ich gar nicht gedacht dass die shell Schuld is :(
Ist das dein Ernst? Das habe ich in meiner ersten Antwort schon nahegelegt.. da darfst du dir durchaus mal selbst an den Kopp packen, wann hier "endlich" was passiert ist.
:lol: :lol: :lol:
Du hast mich in deiner ersten Antwort nur beleidigt! :( "... Der Übeltäter hier ist außerhalb. Ich vermute er sitzt vorm Keyboard und die Argumente falsch angegeben. ... "
Das es an der Konsole liegt hast du mit keinem Wort erwähnt!
Es ist schon bedauerlich, dass ich so wenig weiss und der größte Übeltäter vor meinem Keyboard bin, aber sehr viel mehr bedauerlicher ist es, wenn Menschen wie du andere beleidigen!!!
Fühlst du dich dann besser? Weil du der Schlauste bist?
Warum beantwortest du Fragen, wenn diese - oder vielmehr die Fragestellenden - so unter deiner Würde sind? :o Dank mal darüber nach!
So ein Benehmen ist total Aggro und Assozial! :x Übrigens geht das auch aus deinen anderen Beiträgen hervor.
Wenn du ein Problem mit anderen Menschen hast, dann such dir bitte Hilfe!

Re: wie löse ich das Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Donnerstag 14. September 2023, 10:38
von __deets__
In meiner ersten Antwort habe ich als wahrscheinlichste Ursache die Shell benannt. Du selbst sagst "an das hab ich gar nicht gedacht dass die shell Schuld is" - also habe ich das sehr wohl erwaehnt, du hast schlicht nicht wirklich gelesen, was dir hier geschrieben wurde. Du redest also Schwachsinn, wenn du schreibst " Das es an der Konsole liegt hast du mit keinem Wort erwähnt!"

Und warum ich Fragen beantworte? Weil ich selbst grundlos getriggerten kleinen Mimosen wie dir, die glauben, es besser zu wissen, Hilfe angedeihen lasse. Was ja auch wunderbar geklappt hat. Dankbarkeit dafuer ist natuerlich Fehlanzeige, stattdessen rumgemotze. Aber ich bin agro und asozial...

Re: wie löse ich das Problem der escape characters bei Übergabeparameter in Python?

Verfasst: Samstag 16. September 2023, 18:25
von DeaD_EyE
Der Backslash verhindert die Interpretation der Anführungszeichen.
Durch die falsche Argumentübergabe kann das Programm nur diese falsche Ausgabe machen.

Tipp: Einfach / verwenden