Cómo usar la consola de Python Rhythmbox

13

Tal vez esto es obvio y me lo estoy perdiendo, o tal vez alguien ya ha escrito una gran guía y mi google (aparentemente exhaustivo) no está funcionando, pero no puedo entender por mi vida cómo obtener la consola de Python. Ritmbox para hacer cualquier cosa!

Lo he habilitado desde el menú del complemento y luego lo abro usando Herramientas-> Consola Python.

Imprime

You can access the main window through the 'shell' variable :
<rb.Shell object at 0xa6cdd24 (RBShell at 0xa14e000)>
>>> 

¡Pero cualquier cosa que escriba en el indicador no hace nada ! Lo he intentado help, lo he intentado exit(), lo he intentado print "hello world", ¡nada hace nada!

Todas estas cosas funcionan, por supuesto, en una consola Python normal. ¡No tengo idea de qué demonios está la diferencia aquí! ¿Se supone que debo hacer algo más que presionar enter?

TJ Ellis
fuente
Solo conocía "rhythmbox-client -h" de la terminal +1 por conocer este complemento.
Rojan

Respuestas:

8

La Guía de escritura de complementos de Rhythmbox tiene varios ejemplos de comandos que puede usar en la consola de Python para controlar la reproducción y modificar Rhythmbox:

  • Reproducir pausar

    shell.props.shell_player.playpause()
  • Detener

    shell.props.shell_player.stop()
  • Siguiente pista

    shell.props.shell_player.do_next()
  • Agregar una canción a la cola de reproducción

    shell.add_to_queue("file://awsome_song.ogg")
  • Mostrar una visualización

    import gst
    goom = gst.element_factory_make ("goom")
    sink = gst.element_factory_make ("ximagesink")
    colour = gst.element_factory_make ("ffmpegcolorspace")
    b = gst.Bin()
    b.add (goom, colour, sink)
    b.add_pad(gst.GhostPad("sink", goom.get_pad("sink")))
    goom.link(colour)
    colour.link(sink)
    shell.get_player().props.player.add_tee(b)
ændrük
fuente
Esto es útil, y en realidad lo había encontrado anteriormente, sin embargo, lo que estoy buscando es cómo usar la consola. ¿Es como una consola Python normal? escriba un comando y presione enter? Si es así, entonces el mío está roto. Cuando escribo un comando y presiono enter, simplemente crea una nueva línea, sin ejecutar la línea de código. Mientras sepa que está roto, puedo buscar ayuda para arreglarlo; Solo quería asegurarme de que no estaba haciendo algo tonto (¡y no pude encontrar ningún uso documentado!)
TJ Ellis
De hecho, eso suena como si algo estuviera roto. En rhythmbox-0.12.8-0ubuntu7 sin otros complementos habilitados, la consola funciona igual que una consola Python normal, por ejemplo, escriba print "hello world"y luego presione Entrar. Todavía no veo este problema en ningún otro lugar, por lo que podría considerar abrir un nuevo error en el rastreador de errores Rhythmbox .
ændrük
1
¡gracias! ahora que sé que está roto, hurgaré un poco más y presentaré un informe de error.
TJ Ellis
Tenga en cuenta que al menos a partir de Ubuntu Trusty tahr 14.04, rhythmbox incorpora Python 3.4.0. Entonces, el comando 'print "hello world"' es un error de sintaxis;) En su lugar, use la nueva función de impresión Python 3: 'print ("hello world")'
nealmcb
Tenga en cuenta que algunos de estos ejemplos ya no funcionan en Trusty. Vea algunos consejos sobre qué hacer en lugar de shell.add_to_queue () aquí, aunque parece mucho más complicado, desafortunadamente: mail.gnome.org/archives/rhythmbox-devel/2011-April/…
nealmcb
6

Al igual que con cualquier objeto de Python, puede averiguar mucho al usar el método dir () en él. Esto le dará un buen lugar para comenzar.

You can access the main window through the 'shell' variable :
<rb.Shell object at 0x9e9675c (RBShell at 0x987b018)>
>>> dir(rb.Shell)
['__class__', '__cmp__', '__copy__', '__deepcopy__', '__delattr__', '__dict__',
'__doc__', '__format__', '__gdoc__', '__getattribute__', '__gobject_init__', 
'__grefcount__', '__gtype__', '__hash__', '__init__', '__module__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'add_to_queue', 'add_uri', 'add_widget', 'append_source',
'chain', 'connect', 'connect_after', 'connect_object', 'connect_object_after',
'disconnect', 'disconnect_by_func', 'do_notify', 'emit', 'emit_stop_by_name',
'freeze_notify', 'get_data', 'get_party_mode', 'get_player',
'get_playlist_manager', 'get_properties', 'get_property',
'get_source_by_entry_type', 'get_ui_manager', 'guess_source_for_uri', 
'handler_block', 'handler_block_by_func', 'handler_disconnect',
'handler_is_connected','handler_unblock', 'handler_unblock_by_func', 'load_uri',
'notebook_set_page', 'notify', 'notify_custom', 'present', 'props',
'register_entry_type_for_source', 'remove_from_queue', 'remove_widget',
'set_data', 'set_properties', 'set_property', 'stop_emission', 'thaw_notify',
'toggle_visibility', 'weak_ref']

Luego puede dirigir () cualquiera de las propiedades de aspecto interesante, como 'get_player', tal vez.

Otro buen lugar para buscar es si ve un atributo __doc__ en el objeto.

>>> print rb.Shell.__doc__
Object RBShell

Signals from RBShell:
  visibility-changed (gboolean)
  visibility-changing (gboolean, gboolean) -> gboolean
  create-song-info (RBSongInfo, gboolean)
  removable-media-scan-finished ()
  notify-playing-entry (gboolean)
  notify-custom (guint, gchararray, gchararray, GdkPixbuf, gboolean)

Properties from RBShell:
  no-registration -> gboolean: no-registration
    Whether or not to register
  no-update -> gboolean: no-update
    Whether or not to update the library
  dry-run -> gboolean: dry-run
    Whether or not this is a dry run
  rhythmdb-file -> gchararray: rhythmdb-file
    The RhythmDB file to use
  playlists-file -> gchararray: playlists-file
    The playlists file to use
  selected-source -> RBSource: selected-source
    Source which is currently selected
  db -> RhythmDB: RhythmDB
    RhythmDB object
  ui-manager -> GtkUIManager: GtkUIManager
    GtkUIManager object
  clipboard -> RBShellClipboard: RBShellClipboard
    RBShellClipboard object
  playlist-manager -> RBPlaylistManager: RBPlaylistManager
    RBPlaylistManager object
  removable-media-manager -> RBRemovableMediaManager: RBRemovableMediaManager
    RBRemovableMediaManager object
  shell-player -> RBShellPlayer: RBShellPlayer
    RBShellPlayer object
  window -> GtkWindow: GtkWindow
    GtkWindow object
  prefs -> RBShellPreferences: RBShellPreferences
    RBShellPreferences object
  queue-source -> RBPlayQueueSource: queue-source
    Queue source
  library-source -> RBLibrarySource: library-source
    Library source
  sourcelist-model -> RBSourceListModel: sourcelist-model
    RBSourcelistModel
  sourcelist -> RBSourceList: sourcelist
    RBSourcelist
  source-header -> RBSourceHeader: source header widget
    RBSourceHeader
  visibility -> gboolean: visibility
    Current window visibility

Signals from GObject:
  notify (GParam)
brousch
fuente
¡eso es útil, si puedo hacer que la consola Gorram funcione! tal como están las cosas, si escribo, por ejemplo, dir(rb.Shell)y presiono enter, solo agrega un salto de línea y no hace nada ... ¿Tu shell funcionó OOB? Tengo la instalación de rhythmbox predeterminada en Ubuntu 10.04 ... No puedo pensar en nada que haya cambiado que rompa el shell. Mi consola Python normal (fuera de rb) funciona bien ...
TJ Ellis
Hm, sí, mi caparazón funciona bien sin modificaciones.
brousch
3

Santo cielo, acabo de descubrir cuál era el problema (2.5 años después), por alguna razón mi "enter" asigna mapas a dos eventos clave diferentes dependiendo de si el bloqueo numérico está activado o no. Cuando el bloqueo numérico está activado, regresa KP_ENTER, y cuando el bloqueo numérico está desactivado, regresa Return. Siempre tengo el bloqueo numérico activado, porque prefiero ingresar números con el teclado.

Desafortunadamente, la consola de Python en Rhythmbox solo reconoce Returnejecutar un comando: el KP_ENTERevento solo entra en un salto de línea ...

Pero una solución fácil, solo apague el bloqueo numérico cuando use la consola. Me he encontrado con este problema en algunas otras aplicaciones (generalmente juegos), así que voy a buscar una mejor solución a largo plazo (tal vez obligar a ambos a mapear de Returnalguna manera) ...

TJ Ellis
fuente
1
En caso de que alguien más tenga este problema, encontré una solución a largo plazo: xmodmap -pke > ~/.Xmodmap para crear un diseño personalizado, luego, al final de ese archivo, agregue una línea y keysym KP_Enter = Return luego ejecute xmodmap ~/.Xmodmappara habilitar el nuevo diseño personalizado para esta sesión. Para que se ejecute automáticamente para el futuro, agregue lo siguiente a ~/.xinitrc:if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi
TJ Ellis
comentarios de maldición y su falta de saltos de línea! la ifdeclaración agregada a .xinitrcnecesita tener saltos de línea después theny antes fi.
TJ Ellis
¿Por qué no usas la returntecla en lugar de la entertecla numlock ?
Timo
Estaba usando la tecla principal "Enter", no la del teclado numérico; por alguna razón, tener el bloqueo numérico activado / desactivado también marcó la diferencia.
TJ Ellis
CentOS 6.7 pero con anaconda python, la tecla Enter en el NumberPad tuvo un efecto ligeramente diferente que la tecla Enter en el teclado principal. NumLock no tuvo efecto. El teclado principal Enter devolvería el mensaje '>>>', pero el teclado numérico Enter devolvería una línea vacía.
rjt