Nur Paramiko unter Python 2 laufen lassen?

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
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Hallo,

ich schreibe gerade ein Programm, bei dem ich gezwungenermaßen Paramiko benutzen muss. Das ist ja auch ganz gut, aber leider gibt es davon keine Python-3-Version.

Da ich jetzt allerdings die meiste Zeit bisher nur Python 3 benutzt habe, bin ich damit ein wenig besser vertraut. Außerdem möchte ich das Programm in Zukunft auch ganz gerne auf Python 3 umstellen können, wenn Paramiko dann vielleicht mal irgendwann in einer P3-Version zu finden ist.

Sachen wie die print-Funktion lassen sich ja auch ganz gut mit dem from __future__ import blabla erreichen, aber einige andere Sachen scheinen so nicht so gut zu funktionieren. Irgendwie scheint es mir, als ob ich mein ganzes Hauptprogramm sehr stark anpassen muss, obwohl es doch einfacher wäre, nur das Paramiko-Modul unter Python 2 laufen zu lassen.

Geht das irgendwie? Oder wie bekomme ich mein Python-2-Skript möglichst komplett auf Python-3-Syntax umgestellt?

Danke!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hellstorm hat geschrieben:Geht das irgendwie? Oder wie bekomme ich mein Python-2-Skript möglichst komplett auf Python-3-Syntax umgestellt?
Du kannst dich auch mit Python 2 relativ dicht an der Python 3 Syntax bewegen.

Was du dir mal anschauen solltest ist six, eine Kompatibilitäts-Libraray für Python 2 und 3. Ich experimentiere seit 4 Wochen damit und finde das Ding nicht schlecht. Auch große Projekte wie Django haben six im Einsatz.
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Ah gut, klasse. Das werde ich mir mal anschauen, danke.

Wäre halt sehr gut, wenn ich praktisch mit einem Einzeiler das Programm so weit wie möglich an Python 3 anlehnen könnte.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

/me hat geschrieben:Du kannst dich auch mit Python 2 relativ dicht an der Python 3 Syntax bewegen.
Mit Python 2.7 ist das ziemlich schmerzfrei, aber mit Python 2.5 ... lieber nicht. Solange du nicht mit einem aktuellen Python2 arbeiten kannst, solltest du lieber nicht so tun als waere es Python3.
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Also ich habe hier jeweils Python 2.7.4. Das Programm ist eh nur für mich, von daher ist das ganz gut.

Ich habe hier z.B. gerade das Problem, dass ich bei os.path.getsize() einen Long Integer erhalte. Wenn ich das dann vergleichen will (if dateigroese < (1024*1024)), dann geht es nicht wirklich... Naja, gibt viele solcher kleinen Sachen, die bei Python 3 irgendwie einfacher funktionieren würden.

Naja, da muss ich mich wohl noch mal etwas schlauer machen...

Edit: Ups, das obige Problem war gar kein Problem, lag an etwas anderem :D
BlackJack

@Hellstorm: Das Problem mit dem „Long integer” verstehe ich nicht? Welches hast Du da konkret und warum würde das in Python 3 einfacher funktionieren?
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

War kein Problem, nur Dummheit von mir :D

Im Debugger stand da hinter jeder Zahl ein „L“, und ich dachte, das würde irgendwie Probleme verursachen. Allerdings hatte ich bei der if-Abfrage zwei gleiche Abfragen, weswegen das nicht ging:

Code: Alles auswählen

def groesse_lesbar(dateipfad):
    dateigroesse = os.path.getsize(dateipfad)
    
    if dateigroesse < 1024:
            return "{0:.0f} B".format(dateigroesse)
    elif dateigroesse < (1024*1024):
            return "{0:.0f} KB".format(dateigroesse/1024)
    elif dateigroesse < (1024*1024):
            return "{0:.0f} MB".format(dateigroesse/(1024*1024))
    else:
            return "{0:.0f} GB".format(dateigroesse/(1024*1024*1024))
Ist mir nicht aufgefallen, deswegen ist er nicht in die MB-Spalte gegangen. Ich dachte dann, das läge daran, dass er das wegen dem L nicht vergleichen könnte. Kam mir auch etwas merkwürdig vor, aber naja :D
BlackJack

@Hellstorm: Das hätte man auch mit einer Schleife über Paare von Grenzwerten und Grössenangaben lösen können, dann müsste man nicht so viel Code wiederholen und könnte es auch einfach erweitern. Die Einheiten sind übrigens falsch, denn wenn Du mit 1024 multiplizierst müsste es eigentlich 'KiB', 'MiB', und 'GiB' heissen.
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Stimmt... Werde ich mal direkt verbessern :D

zu Kib/MiB/GiB: Naja, gut, da hast du recht. Normalerweise bin ich da auch eher ein Fan von. Dann werde ich mal direkt 1000 statt 1024 schreiben (Ich halte es nämlich eigentlich für sinnlos, extra eine Vorsilbe Namens Kibi zu erstellen, anstatt einfach Kilo wie überall sonst auch zu benutzen).
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hellstorm hat geschrieben:Ich halte es nämlich eigentlich für sinnlos, extra eine Vorsilbe Namens Kibi zu erstellen, anstatt einfach Kilo wie überall sonst auch zu benutzen.
Man sollte schon verschiedene Bezeichner für verschiedene Dinge verwenden. "kilo" ist eben ein internationaler Standard für exakt 1000 und nicht etwas um 1000 herum. Und da 1024 nicht 1000 entspricht, sollte man es auch nicht einfach so bezeichnen. Oder nennst du Katzen auch Hunde? Haben beide Fell, vier Beine und sind auch sonst recht ähnlich. Warum also zwei Namen?

Natürlich wissen wir alle, dass Katzen die viel besseren Tiere sind.
Das Leben ist wie ein Tennisball.
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

EyDu hat geschrieben:
Hellstorm hat geschrieben:Ich halte es nämlich eigentlich für sinnlos, extra eine Vorsilbe Namens Kibi zu erstellen, anstatt einfach Kilo wie überall sonst auch zu benutzen.
Man sollte schon verschiedene Bezeichner für verschiedene Dinge verwenden. "kilo" ist eben ein internationaler Standard für exakt 1000 und nicht etwas um 1000 herum. Und da 1024 nicht 1000 entspricht, sollte man es auch nicht einfach so bezeichnen. Oder nennst du Katzen auch Hunde? Haben beide Fell, vier Beine und sind auch sonst recht ähnlich. Warum also zwei Namen?
Stimmt. Aber leider ist es sehr schwer, konsequent KiB zu schreiben. Zum einen schreibt es sich doof (in der Mitte die Shift-Taste wieder loslassen + einen Buchstaben mehr), zum anderen wird es nirgendswo genutzt (Auch unter Linux nicht durchgehend, wo ich mir ruhig mal eine komplett konsequente Nutzung davon wünschen würde).

Da ich aber so eine Nutzung von 1024 sowieso als sinnlos empfinde, wäre die richtige Nutzung von kB mit dem Faktor 1000 wesentlich besser – Die Festplattenhersteller machen das ja schon richtig (wenn auch dort nicht aus Überzeugung, sondern aus Kundenverarsche). Nur wird das ja noch weniger als KiB benutzt und führt sogar noch zu widersprüchlichen Aussagen, wenn jemand kB mit 1024 nimmt.

Da aber 1 kB = 1024 B praktisch in der Softwarewelt überall genutzt wird, 1 kB = 1000 B aber nirgendswo, betrachte ich es nicht unbedingt als Weltuntergang, 1 kB = 1024 B zu nutzen.
BlackJack

@Hellstorm: Was andere machen in mir in diesem Zusammenhang erst mal egal weil *ich* es richtig machen will. Zumal es unter Linux durchaus Software gibt die es richtig macht. Wenn nicht jeder Entwickler bei dich selbst anfängt, kann sich die richtige Bezeichnung ja auch nicht durchsetzen.
Antworten