Come usare la console python di Rhythmbox


13

Forse questo è ovvio e mi manca, o forse qualcuno ha già scritto una grande guida e il mio googling (apparentemente esaustivo) non riesce a risolverlo, ma non riesco a capire per la mia vita come ottenere la console maledetta in pitone rhythmbox per fare qualsiasi cosa!

L'ho abilitato dal menu del plug-in e quindi l'ho aperto utilizzando Strumenti-> Python Console.

Stampa

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

Ma tutto ciò che scrivo al prompt non fa nulla ! Ci ho provato help, ci ho provato exit(), ci ho provato print "hello world", niente fa niente!

Tutte queste cose funzionano, ovviamente, in una normale console Python. Non ho idea di quale diavolo la differenza sia qui! Dovrei fare qualcosa di diverso da premere Invio?


Conoscevo "rhythmbox-client -h" dal terminale. +1 per essere a conoscenza di questo plugin.
Rojan,

Risposte:


8

La Guida alla scrittura dei plugin di Rhythmbox contiene numerosi esempi di comandi che è possibile utilizzare nella console di Python per controllare la riproduzione e modificare Rhythmbox:

  • Play pausa

    shell.props.shell_player.playpause()
  • Fermare

    shell.props.shell_player.stop()
  • Prossima traccia

    shell.props.shell_player.do_next()
  • Aggiungi un brano alla coda di riproduzione

    shell.add_to_queue("file://awsome_song.ogg")
  • Mostra una visualizzazione

    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)

Questo è utile, e in realtà l'avevo trovato in precedenza, tuttavia quello che sto cercando è come utilizzare effettivamente la console. È proprio come una normale console Python; digitare un comando e premere invio? Se è così, allora il mio è rotto. Quando digito un comando e premo invio, viene appena creata una nuova riga, senza eseguire la riga di codice. Finché so che è rotto, allora posso cercare aiuto per risolverlo; Volevo solo assicurarmi di non fare qualcosa di stupido (e non sono riuscito a trovarne un uso documentato!)
TJ Ellis

Sembra davvero che qualcosa sia rotto. In rhythmbox-0.12.8-0ubuntu7 senza altri plug-in abilitati, la console funziona proprio come una normale console Python, ad esempio digitare print "hello world"e quindi premere Invio. Non vedo ancora questo problema segnalato altrove, quindi potresti prendere in considerazione l'apertura di un nuovo bug nel tracker dei bug di Rhythmbox .
ændrük,

1
grazie! ora che so che è rotto, cercherò un po 'di più e presenterò una segnalazione di bug.
TJ Ellis,

Si noti che almeno a partire da Ubuntu Trusty tahr 14.04, rhythmbox incorpora python 3.4.0. Quindi il comando 'print "ciao mondo"' è un errore di sintassi;) Invece, usa la nuova funzione di stampa di Python 3: 'print ("ciao mondo")'
nealmcb

Si noti che alcuni di questi esempi non funzionano più in Trusty. Ecco alcuni suggerimenti su cosa fare invece di shell.add_to_queue () qui - anche se sembra molto più complicato, sfortunatamente: mail.gnome.org/archives/rhythmbox-devel/2011-April/…
nealmcb

6

Come con qualsiasi oggetto Python, puoi scoprire molte cose usando il metodo dir () su di esso. Questo ti darà un buon punto di partenza.

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']

Puoi quindi dir () qualsiasi proprietà dall'aspetto interessante, come 'get_player', forse.

Un altro buon posto in cui guardare è se vedi un attributo __doc__ sull'oggetto.

>>> 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)

è utile, se riesco a far funzionare la console gorram! com'è, se scrivo, per esempio, dir(rb.Shell)e premo invio, aggiunge solo un'interruzione di riga e non fa nulla ... La tua shell ha funzionato OOB? Ho l'installazione di rhythmbox di default su Ubuntu 10.04 .... Non riesco a pensare a nulla di ciò che ho cambiato che rompa la shell. La mia normale console Python (al di fuori di rb) funziona perfettamente ...
TJ Ellis,

Hm, sì, la mia shell funziona bene senza modifiche.
brousch,

3

Merda, ho appena scoperto qual era il problema (2,5 anni dopo), per qualche motivo il mio tasto "invio" è associato a due diversi eventi chiave a seconda che il blocco numerico sia attivo o meno. Quando il blocco numerico è attivo, ritorna KP_ENTERe quando il blocco numerico è disattivato, ritorna Return. Ho sempre attivato il blocco numerico, perché preferisco inserire numeri con la tastiera.

Sfortunatamente, la console python in Rhythmbox riconosce solo Returnl'esecuzione di un comando: l' KP_ENTERevento entra in una interruzione di riga ...

Ma soluzione semplice, basta disattivare il blocco numerico quando si utilizza la console. Ho riscontrato questo problema in alcune altre applicazioni (in genere giochi), quindi cercherò una soluzione a lungo termine migliore (forse forzando entrambi a mappare in Returnqualche modo) ...


1
Se qualcun altro ha questo problema, ho trovato una soluzione a lungo termine: xmodmap -pke > ~/.Xmodmap creare un layout personalizzato, quindi alla fine di quel file aggiungere una riga e keysym KP_Enter = Return quindi eseguire xmodmap ~/.Xmodmapper abilitare il nuovo layout personalizzato per questa sessione. Per rendere l'autorun per il futuro, aggiungi quanto segue a ~/.xinitrc:if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi
TJ Ellis,

maledici commenti e la loro mancanza di interruzioni di riga! l' ifistruzione aggiunta .xinitrcdeve avere interruzioni di riga dopo thene prima fi.
TJ Ellis,

Perché non usi la returnchiave invece della chiave del numlock enter?
Timo,

Stavo usando il tasto "Invio" principale, non quello nel tastierino numerico; per qualche motivo l'attivazione / disattivazione del blocco numerico ha fatto la differenza anche per quello.
TJ Ellis,

CentOS 6.7 ma con anaconda python, il tasto Invio sul NumberPad ha avuto un effetto leggermente diverso rispetto al tasto Invio sulla tastiera principale. NumLock non ha avuto effetto. La tastiera principale Invio restituisce il prompt '>>>', ma il tasto Invio numero restituisce una riga vuota.
rjt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.