Unterschiede beim ausführen unter Windows und Linux

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
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

Guten Tag
Ich hab folgendes Problem:
Ich müsste einen String einlesen und diesen dann splitten um ihn weiterverarbeiten zu können. An sich keine große Sache:

Code: Alles auswählen

eingabe = str(input("Eingabe: ")).split('\\',2)
Unter Windows funktioniert das auch ohne Probleme aber wenn ich es auf einem Linux System ausführe kommt die Fehlermeldung:
Eingabe: test\test1
Traceback (most recent call last):
File "slash_split.py", line 8, in <module>
eingabe = str(input("Eingabe: ")).split('\\',2)
File "<string>", line 1
test\test1
^
SyntaxError: unexpected character after line continuation character
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

$ python 
Python 2.7.5+ (default, Aug  4 2013, 10:07:17) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> str(raw_input("in: ")).split('\\', 2)
in: test\test1
['test', 'test1']
>>> str(input("in: ")).split('\\', 2)
in: test\\test1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    test\\test1
              ^
SyntaxError: unexpected character after line continuation character

Code: Alles auswählen

$ python3                                         
Python 3.3.2+ (default, Aug  4 2013, 15:50:24) 
[GCC 4.8.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> str(input("in: ")).split('\\', 2)
in: test\\test1
['test', '', 'test1']
Kann es sein, dass du unter Windows ein Python3 benutzt und unter Linux ein Python2?
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

Also laut

Code: Alles auswählen

python -V
ist Version 2.7.3 installiert. Wenn ich dann aber

Code: Alles auswählen

sudo apt-get python3
versuche sagt er das Version 3.2.3 schon installiert wurde.
BlackJack

@audacity363: Dann ist beides installiert. Und natürlich kann man nicht beide über den gleichen Programmnamen aufrufen. Python 3 heisst dann üblicherweise python3.
albertus
User
Beiträge: 52
Registriert: Mittwoch 7. Juli 2010, 14:48

audacity363 hat geschrieben:Guten Tag
Ich hab folgendes Problem:
Ich müsste einen String einlesen und diesen dann splitten um ihn weiterverarbeiten zu können. An sich keine große Sache:

Code: Alles auswählen

eingabe = str(input("Eingabe: ")).split('\\',2)
Unter Windows funktioniert das auch ohne Probleme aber wenn ich es auf einem Linux System ausführe kommt die Fehlermeldung:
Eingabe: test\test1
Traceback (most recent call last):
File "slash_split.py", line 8, in <module>
eingabe = str(input("Eingabe: ")).split('\\',2)
File "<string>", line 1
test\test1
^
SyntaxError: unexpected character after line continuation character
Hallo,

hier mal ein schnell Schuss:

unter Python 2.7.X müsste das hier funktionieren: eingabe = raw_input("Eingabe: ").split('\\',2)
unter Python 3.X.X müsste das hier funktionieren: eingabe = input("Eingabe: ").split('\\',2)

Erklärung: unter Python 2.7.X verhält sich die Funktion input interpretierend. Das heißt es will die übergebenen Daten verarbeiten:
Beispiel:

Code: Alles auswählen

print(input("A:"))
A:"foo\nNewline"
foo
Newline

print(raw_input("A:"))
A:foo\nNewline
foo\nNewline
Dieses verhalten ist gefährlich und deshalb sollte man unter Python 2.X nur raw_input verwenden. Bei Python 3.X verhält sich input wie raw_input unter Python 2.X.

Ich hoffe ich konnte Helfen.
Mit freundlichen Grüßen

Albertus
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

Okey. Sorry das ich mich erst jetzt melde aber irgendwie vergesse ich die Threads immer wenn keine Mail kommt :)
Ja habe es dann einfach nochmal mit python3 probiert und es hat ohne Probleme geklappt.
Eine Frage zu den Version Unterschiede habe ich noch (Thema Threads):
Habe einen Server(liegt in einer zweiten Datei) erstellt der auf eine Android App hört. An sich funkt er nur währenddessen soll noch was anderes laufen.
Im Netz hab ich diese Funktion gefunden:

Code: Alles auswählen

import thread, Android #So heißt die Datei

thread.start_new_thread(Android.Android_Server())
#weiteres Programm
Dort gibt er mir aber die Meldung Undefined variable from import: start_new_thread aus. Muss ich das unter 3.x.x jetzt mit dem Modul threading machen? Fände dies ein wenig umständlich...
BlackJack

@audacity363: Das hättest Du auch unter Python 2 schon mit dem `threading`-Modul machen sollen. Die Dokumentation vom `thread`-Modul weist schon seit einer halben Ewigkeit darauf hin, dass man besser `threading` nehmen sollte. In Python 3 ist dann konsequenterweise aus der öffentlichen API verschwunden.

Edit: Ich sehe das auch nichts umständliches dran. Der Aufruf ist halt geringfügig anders.
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

@BlackJack Bin erst seit 3.x.x dabei. Mhh ich habe das jetzt so verstanden das eine eigene Klasse usw. erstellt werden muss. Irgendwie erinnert mich das ganze an Java... Na ja Egal dann mach ich es halt so. Danke für die schnellen und guten Antworten. Habe das Forum das zu schätzen gelernt.
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

Ist es normal das die prints in einem Thread nicht ausgegeben werden?
BlackJack

@audacity363: Du musst keine eigene Klasse schreiben — es gibt doch schon `threading.Thread`. Schau Dir einfach mal an was man *der* Klasse beim erstellen an Argumenten übergeben kann. Damit wird das nur ein Methodenaufruf mehr als beim `thread`-Modul.

`print()` in einem Thread wird ganz normal auf `sys.stdout` ausgegeben wie im impliziten Hauptthread auch.
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

mhh okey.. vll. sollte ich mal meine Lektüre ändern. hat jetzt ohne Anstand geklappt danke.
Antworten