bpython - a fancy interface to the Python interpreter

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

@lunar: bpython führt beim Starten (wie die Vanilla-Python-REPL auch) die Datei aus, auf die die Umgebungsvariable ``PYTHONSTARTUP`` verweist.

@Rebecca: Nunja, es gibt kein systemweites Theme-Verzeichnis. Allerdings sollten die Beispielthemes schon installiert werden, was bei den Debian.Paketen bis jetzt nicht der Fall zu sein scheint. Vielleicht ist das aber mit dem neuen Paket für 0.9.5.1 behoben (sollte bald in den Repos landen, wurde heute vom Package-Maintainer erstellt).
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
lunar

Trundle hat geschrieben:@lunar: bpython führt beim Starten (wie die Vanilla-Python-REPL auch) die Datei aus, auf die die Umgebungsvariable ``PYTHONSTARTUP`` verweist.
Danke, das wusste ich nicht.

Edit: Allerdings funktioniert das nicht für "__future__"-Imports. Ein "from __future__ import print_function" in der $PYTHONSTARTUP-Datei hat keinen Einfluss auf den Interpreter.
Zuletzt geändert von lunar am Mittwoch 23. September 2009, 22:57, insgesamt 1-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Leonidas hat geschrieben:Das Standard-Theme vom GNOME-Terminal ist übrigens auch eine positivdarstellung. Ich stelle es aber trotzdem lieber auf negativ ein, warum auch immer.
Hallo!

Das ist jedes mal so ziemlich das Erste, was ich nach dem Installieren von Ubuntu mache. Ich stelle das Terminal auf "weiße Schrift auf Schwarzem Hintergrund" um. Umgekehrt, will und kann ich nicht mit einem Terminal arbeiten. ;-)

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

gerold hat geschrieben:
Leonidas hat geschrieben:Das Standard-Theme vom GNOME-Terminal ist übrigens auch eine positivdarstellung. Ich stelle es aber trotzdem lieber auf negativ ein, warum auch immer.
Hallo!

Das ist jedes mal so ziemlich das Erste, was ich nach dem Installieren von Ubuntu mache. Ich stelle das Terminal auf "weiße Schrift auf Schwarzem Hintergrund" um. Umgekehrt, will und kann ich nicht mit einem Terminal arbeiten. ;-)

lg
Gerold
:-)
Hatte ich früher auch immer, mittlerweile finde ich es anders herum angenehmer - insbesondere bei Laptop und schlechte Lichtverhältnissen.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

lunar hat geschrieben:@mkallas: Ist das wirklich die Standardeinstellung ist? Meine KDE 4-Konsole ist jedenfalls weiß auf schwarz, ohne das ich mich erinnern könnte, die Konfiguration verändert zu haben.
Ist iirc seit KDE4 so.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

@lunar: Danke, gefixt.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

apollo13 hat geschrieben:
lunar hat geschrieben:@mkallas: Ist das wirklich die Standardeinstellung ist? Meine KDE 4-Konsole ist jedenfalls weiß auf schwarz, ohne das ich mich erinnern könnte, die Konfiguration verändert zu haben.
Ist iirc seit KDE4 so.
Kann ich nicht bestaetigen, hatte das auch schon in KDE 3.5 als Standard.
vicbrother
User
Beiträge: 32
Registriert: Donnerstag 26. Februar 2009, 22:41

Gibt es in bpython auch die Möglichkeit, die/den letzte/n Funktion/Codeblock zu laden und zu editieren wie in ipython?
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Nein, Codeblöcke editieren kann bpython leider (noch) nicht. Wobei ich das in ipython auch nie so überzeugend fand.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Code: Alles auswählen

>>> import sys
>>> sys.stdout.fileno()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: 'Repl' object has no attribute 'fileno'
Ist vermutlich kein gewolltes Verhalten, oder?

Was ich noch heraus gefunden habe:

Code: Alles auswählen

>>> from ctypes import cdll
>>> cdll.foo
Sobald ich die öffnende Klammer setze, beendet sich BPython und es erfolgt ein langer Traceback.

Vergleich:

Code: Alles auswählen

Python 2.6.4 (r264:75706, Nov  2 2009, 14:38:03) 
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import cdll
>>> cdll.foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/ctypes/__init__.py", line 423, in __getattr__
    dll = self._dlltype(name)
  File "/usr/lib/python2.6/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: foo: cannot open shared object file: No such file or directory
...und kein Absturz. Das hier offenbar etwas mit dem `ctypes`-Modul nicht stimmt (oder ich etwas nicht verstanden habe *hihi*), will ich mal außen vor lassen.

Hat BPython eigentlich ein Pendant zu IPythons `<Name>?` bzw. `<Name>??` ?
Diese beiden Features sind mir schon sehr wichtig.
vicbrother
User
Beiträge: 32
Registriert: Donnerstag 26. Februar 2009, 22:41

Trundle hat geschrieben:Nein, Codeblöcke editieren kann bpython leider (noch) nicht. Wobei ich das in ipython auch nie so überzeugend fand.
Ich sprach mit dem Hauptentwickler per IRC - bei ihm steht das auf der TODO. Er meint das wäre allerdings recht umfangreich einzufügen. Warten wir es ab.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

snafu hat geschrieben:

Code: Alles auswählen

>>> import sys
>>> sys.stdout.fileno()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: 'Repl' object has no attribute 'fileno'
Ist vermutlich kein gewolltes Verhalten, oder?
Naja, was würdest du erwarten? Ein stdout-Wrapper muss halt nun mal nicht das volle file-Interface unterstützen.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

@snafu: Das ist in der Tat eher weniger das beabsichtigte Resultat. Dadurch, dass es eine curses-Anwendung ist, muss `sys.stdout` eben komplett gewrappt werden und bis jetzt hat sich noch niemand beschwert, dass es `fileno()` nicht gibt.

Den Fehler mit ctypes werde ich mir bei Gelegenheit mal zu Gemüte führen. Prinzipiell empfiehlt es sich, Bugs in den Issue-Tracker einzupflegen, so dass sie nicht verloren gehen.

@vicbrother: Ich bin mir nicht sicher, ob du da Bob richtig verstanden hast. Wir sind uns natürlich dessen bewusst, dass man gerade keine Blöcke editieren kann und haben auch nichts dagegen, wenn bpython das könnte. Das heißt aber leider nicht, dass bpython das in absehbarer Zeit auch können wird.

Edit: Es steht natürlich jedem frei, das für bpython zu implementieren und einen Patch beizusteuern.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

snafu hat geschrieben:Hat BPython eigentlich ein Pendant zu IPythons `<Name>?` bzw. `<Name>??` ?
Den Quelltext bekommt man mit F2, für den Docstring gibt es (IIRC) noch keinen Shortcut. Aber bei Aufrufen wird der ja auch zusammen mit der Signatur angezeigt.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

birkenfeld hat geschrieben:
snafu hat geschrieben:

Code: Alles auswählen

>>> import sys
>>> sys.stdout.fileno()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: 'Repl' object has no attribute 'fileno'
Ist vermutlich kein gewolltes Verhalten, oder?
Naja, was würdest du erwarten? Ein stdout-Wrapper muss halt nun mal nicht das volle file-Interface unterstützen.
Ich würde von einer Python-Shell erwarten, dass es mich als Benutzer nicht interessieren muss, wie `sys.stdout` zu Stande kommt, sondern dass es einfach wie gewohnt funktioniert.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

So einfach ist das aber halt mal nicht. Das geht nicht zu ignorieren. Es sind einfach keine realen Dateiobjekte. Beispielsweise wird ``os.write(1, 'Yay')`` nicht auf dem Bildschirm landen. Was also sollte `fileno()` zurückgeben? Die Dokumentation von Python drückt sich hier auch klar aus. Über `sys.stdout` und `sys.stderr`: "stdout and stderr needn’t be built-in file objects: any object is acceptable as long as it has a write() method that takes a string argument" sowie über `file.fileno()`: "Note: File-like objects which do not have a real file descriptor should not provide this method!"
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@snafu:
Gehts Dir darum, auf die Terminaleigenschaften zu zugreifen oder wofür brauchst Du fileno()? Problem dabei ist, das 0,1,2 als stdin,stdout und stderr festlegt sind (Posixstandard, wenn mich nicht alles täuscht) und da aber schon bpython dranklebt. Evtl. ginge es, die Ein-/Ausgabe über ein Pseudoterminal vorzunehmen (also nicht 0,1,2), um an die Eigenschaften zu kommen, dazu müsste aber alles von bpython umgeleitet werden (kA, wie das jetzt gelöst ist). Ob es den Aufwand wert ist, ist eine ganz andere Frage, zumindest löst keine der grossen IDEs das zufriedenstellend, so dass man hier definitiv nicht von "gewohnt" reden kann.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

jerch hat geschrieben:Gehts Dir darum, auf die Terminaleigenschaften zu zugreifen oder wofür brauchst Du fileno()?
Naja, ich nutze ja die Kombination `os.ctermid()` + `os.open()`, um den Dateideskriptor zu erhalten, den ich zur Ermittlung der Zeilengröße brauche. Ich hatte in BPython nur mal die Variante mit der `fileno()`-Methode eines Ausgabekanals ausprobiert und festgestellt, dass das dort nicht funktioniert.

Keine Ahnung, wie IPython das intern löst, aber dort scheint es ein Dateiobjekt zu sein:

Code: Alles auswählen

In [4]: sys.stdout.fileno()
Out[4]: 1

In [5]: sys.stdout
Out[5]: <open file '<stdout>', mode 'w' at 0xb78aa070>
Ist ja nicht zwingend ein Must-Have, wenn die Meinungen darüber anders sind. Mir ist es halt aufgefallen.
vicbrother
User
Beiträge: 32
Registriert: Donnerstag 26. Februar 2009, 22:41

@Trundle: Gibt es eine Roadmap zu bpython?
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

@snafu: ipython ist keine curses-Anwendung.

@vicbrother: Nope.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Antworten