Cara menggunakan konsol python Rhythmbox


13

Mungkin ini sudah jelas dan saya melewatkannya, atau mungkin seseorang sudah menulis panduan hebat dan googling saya (tampaknya lengkap) gagal untuk mengaktifkannya, tetapi saya tidak tahu bagaimana saya bisa mendapatkan konsol python sialan di dalamnya kotak ritme untuk melakukan apa saja!

Saya telah mengaktifkannya dari menu plugin, dan kemudian membukanya menggunakan Tools-> Python Console.

Mencetak

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

Tapi apa pun yang saya ketik di prompt tidak melakukan apa - apa ! Saya sudah mencoba help, saya sudah mencoba exit(), saya sudah mencoba print "hello world", tidak ada yang bisa apa-apa!

Semua hal ini bekerja, tentu saja, di konsol python normal. Saya tidak tahu apa iblis bedanya di sini! Apakah saya harus melakukan sesuatu selain menekan enter?


Saya baru tahu "rhythmbox-client -h" dari terminal. +1 untuk mengetahui plugin ini.
Rojan

Jawaban:


8

The Rhythmbox Plugin Panduan Menulis memiliki beberapa contoh perintah yang dapat digunakan dalam Python konsol untuk pemutaran kontrol dan memodifikasi Rhythmbox:

  • Mainkan / Jeda

    shell.props.shell_player.playpause()
  • Berhenti

    shell.props.shell_player.stop()
  • Trek selanjutnya

    shell.props.shell_player.do_next()
  • Tambahkan lagu ke Antrean Putar

    shell.add_to_queue("file://awsome_song.ogg")
  • Tampilkan visualisasi

    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)

Ini sangat membantu, dan sebenarnya saya telah menemukan ini sebelumnya, namun apa yang saya cari adalah bagaimana sebenarnya menggunakan konsol. Apakah itu seperti konsol python biasa; ketik perintah dan tekan enter? Jika demikian, maka milikku rusak. Ketika saya mengetik perintah dan tekan enter, itu hanya membuat baris baru, tanpa mengeksekusi baris kode. Selama saya tahu itu rusak, maka saya bisa mencari bantuan untuk memperbaikinya; Saya hanya ingin memastikan saya tidak melakukan sesuatu yang bodoh (dan tidak dapat menemukan penggunaan yang didokumentasikan!)
TJ Ellis

Itu memang terdengar seperti ada sesuatu yang rusak. Di rhythmbox-0.12.8-0ubuntu7 tanpa plugin yang diaktifkan, konsol berfungsi seperti konsol Python biasa, mis. Ketik print "hello world"dan kemudian tekan Enter. Saya belum melihat masalah ini dilaporkan di tempat lain, jadi Anda dapat mempertimbangkan untuk membuka bug baru di pelacak bug Rhythmbox .
ændrük

1
Terima kasih! sekarang saya tahu itu rusak, saya akan melihat sedikit lebih banyak dan mengajukan laporan bug.
TJ Ellis

Perhatikan bahwa setidaknya pada Ubuntu Trusty 14,04,04, rhythmbox embeds python 3.4.0. Jadi perintah 'print "hello world"' adalah kesalahan sintaks;) Sebagai gantinya, gunakan fungsi cetak Python 3 baru: 'print ("hello world")'
nealmcb

Perhatikan bahwa beberapa contoh ini tidak lagi berfungsi di Trusty. Lihat beberapa petunjuk tentang apa yang harus dilakukan alih-alih shell.add_to_queue () di sini - meskipun terlihat jauh lebih rumit, sayangnya: mail.gnome.org/archives/rhythmbox-devel/2011-April/…
nealmcb

6

Seperti halnya objek Python, Anda dapat mengetahui banyak tentang hal itu dengan menggunakan metode dir () di atasnya. Ini akan memberi Anda tempat yang baik untuk memulai.

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

Anda kemudian dapat dir () salah satu properti yang tampak menarik, seperti 'get_player', mungkin.

Tempat lain yang baik untuk dilihat adalah jika Anda melihat atribut __doc__ pada objek.

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

itu berguna, jika saya bisa membuat konsol gorram bekerja sama sekali! seperti itu, jika saya mengetik, misalnya, dir(rb.Shell)dan tekan enter, itu hanya menambah jeda baris dan tidak melakukan apa-apa ... Apakah shell Anda berfungsi OOB? Saya memiliki instalasi rhythmbox default di Ubuntu 10.04 .... Saya tidak bisa memikirkan apa pun yang telah saya ubah yang akan merusak shell. Konsol python reguler saya (di luar rb) berfungsi dengan baik ...
TJ Ellis

Hm, yeah, shell saya berfungsi dengan baik tanpa modifikasi.
brousch

3

Astaga, saya baru tahu apa masalahnya (2,5 tahun kemudian) — karena alasan tertentu saya "memasukkan" peta kunci ke dua peristiwa utama yang berbeda tergantung pada apakah numlock aktif atau tidak. Ketika numlock aktif, ia kembali KP_ENTER, dan ketika numlock mati, ia kembali Return. Saya selalu mengaktifkan numlock, karena saya lebih suka memasukkan angka dengan tombol.

Sayangnya, konsol python di Rhythmbox hanya mengenali Returnuntuk menjalankan perintah — KP_ENTERacara baru saja memasuki jeda baris ...

Tapi mudah diperbaiki, matikan saja numlock saat menggunakan konsol. Saya mengalami masalah ini di beberapa aplikasi lain (biasanya game), jadi saya akan mencari solusi jangka panjang yang lebih baik (mungkin memaksa keduanya untuk memetakan Returnentah bagaimana) ...


1
Jika ada orang lain yang memiliki masalah ini, saya memang menemukan solusi jangka panjang: xmodmap -pke > ~/.Xmodmap untuk membuat tata letak khusus, kemudian pada akhir file tambahkan baris keysym KP_Enter = Return kemudian jalankan xmodmap ~/.Xmodmapuntuk mengaktifkan tata letak khusus baru untuk sesi ini. Untuk menjadikannya autorun untuk masa depan, tambahkan yang berikut ke ~/.xinitrc:if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi
TJ Ellis

kutukan komentar dan kurangnya jeda baris! yang ifpernyataan ditambahkan ke .xinitrckebutuhan untuk memiliki jeda baris setelah thendan sebelum fi.
TJ Ellis

Mengapa Anda tidak menggunakan returnkunci dan bukan tombol numlock enter?
Timo

Saya menggunakan kunci "Enter" utama, bukan yang ada di numpad; untuk beberapa alasan memiliki numlock on / off membuat perbedaan untuk itu juga.
TJ Ellis

CentOS 6.7 tetapi dengan anaconda python, tombol Enter pada NumberPad memiliki efek yang sedikit berbeda dari tombol Enter pada keyboard utama. NumLock tidak berpengaruh. Keyboard utama Enter akan mengembalikan prompt '>>>', tetapi NumberPad Enter akan mengembalikan baris kosong.
rjt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.