Как использовать консоль Python Rhythmbox

13

Может быть, это очевидно, и я упускаю его, или, может быть, кто-то уже написал отличное руководство, и мое (кажущееся исчерпывающим) поиск в Google не может его включить, но я не могу понять, как получить проклятую консоль Python в ритмбокс делать что угодно!

Я включил его из меню плагинов, а затем открыл его с помощью Tools-> Python Console.

Это печатает

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

Но все, что я печатаю в командной строке, ничего не делает ! Я пытался help, я пытался exit(), я пытался print "hello world", ничего не делает!

Все это работает, конечно, в обычной консоли Python. Понятия не имею, что за черт здесь разница! Должен ли я сделать что-то кроме нажатия Enter?

Ти Джей Эллис
источник
Я просто знал "rhythmbox-client -h" из терминала. +1 за ознакомление с этим плагином.
Роян

Ответы:

8

В Руководстве по написанию плагинов Rhythmbox есть несколько примеров команд, которые вы можете использовать в консоли Python для управления воспроизведением и изменения Rhythmbox:

  • Воспроизведение / Пауза

    shell.props.shell_player.playpause()
  • Стоп

    shell.props.shell_player.stop()
  • Следующий трек

    shell.props.shell_player.do_next()
  • Добавить песню в очередь воспроизведения

    shell.add_to_queue("file://awsome_song.ogg")
  • Показать визуализацию

    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
источник
Это полезно, и на самом деле я нашел это ранее, однако, что я ищу, так это как на самом деле использовать консоль. Это как обычная консоль Python; введите команду и нажмите ввод? Если так, то мой сломан. Когда я набираю команду и нажимаю ввод, она просто переводит новую строку без выполнения строки кода. Пока я знаю, что он сломан, я могу обратиться за помощью, чтобы починить его; Я просто хотел убедиться, что я не делал ничего глупого (и не мог найти никакого документально подтвержденного использования!)
TJ Ellis
Это действительно звучит так, будто что-то сломано. В rhythmbox-0.12.8-0ubuntu7 без других подключаемых модулей консоль работает так же, как обычная консоль Python, например, введите print "hello world"и нажмите Enter. Пока что я не вижу сообщений об этой проблеме, поэтому вы можете открыть новую ошибку в трекере ошибок Rhythmbox .
Ондрюк,
1
Спасибо! теперь, когда я знаю, что он сломан, я еще немного покопаюсь и напишу отчет об ошибке.
TJ Ellis
Обратите внимание, что по крайней мере, начиная с Ubuntu Trusty tahr 14.04, rhythmbox встраивает python 3.4.0. Таким образом, команда 'print "hello world"' является синтаксической ошибкой;) Вместо этого используйте новую функцию печати Python 3: 'print ("hello world")'
nealmcb
Обратите внимание, что некоторые из этих примеров больше не работают в Trusty. Посмотрите некоторые советы о том, что делать вместо shell.add_to_queue () здесь - хотя это выглядит намного сложнее, к сожалению: mail.gnome.org/archives/rhythmbox-devel/2011-April/…
nealmcb
6

Как и с любым объектом Python, вы можете многое узнать об этом, используя для этого метод dir (). Это даст вам хорошее место для начала.

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

Затем вы можете использовать dir () любое интересное свойство, например, get_player.

Еще одно хорошее место, чтобы посмотреть, если вы видите атрибут __doc__ на объекте.

>>> 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
источник
это удобно, если я смогу заставить консоль gorram работать вообще! как, например, если я наберу, например, dir(rb.Shell)и нажму клавишу ввода, он просто добавляет разрыв строки и ничего не делает ... Работает ли ваша оболочка OOB? У меня есть стандартная установка rhythmbox на Ubuntu 10.04 .... Я не могу вспомнить ничего, что я изменил, что сломало бы оболочку. Моя обычная консоль python (за пределами rb) работает просто отлично ...
TJ Ellis
Хм, да, моя оболочка работает нормально без изменений.
brousch
3

Черт возьми, я только что выяснил, в чем проблема (2,5 года спустя) - по какой-то причине моя клавиша "ввод" отображается на два разных события ключа в зависимости от того, включена или выключена numlock. Когда numlock включен, он возвращается KP_ENTER, а когда numlock выключен, он возвращается Return. У меня всегда включен numlock, потому что я предпочитаю вводить цифры с клавиатуры.

К сожалению, консоль python в Rhythmbox распознает только Returnзапуск команды - KP_ENTERсобытие просто входит в разрыв строки ...

Но это легко исправить, просто отключите numlock при использовании консоли. Я столкнулся с этой проблемой в нескольких других приложениях (обычно в играх), поэтому я собираюсь найти лучшее долгосрочное решение (возможно, заставив оба сопоставить Returnкак-то) ...

Ти Джей Эллис
источник
1
В случае, если у кого-то еще есть эта проблема, я нашел долгосрочное решение: xmodmap -pke > ~/.Xmodmap создать пользовательский макет, затем в конце этого файла добавить строку и keysym KP_Enter = Return запустить, xmodmap ~/.Xmodmapчтобы включить новый пользовательский макет для этого сеанса. Чтобы сделать автозапуск на будущее, добавьте следующее ~/.xinitrc:if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi
TJ Ellis
проклятие комментариев и их отсутствие разрывов строк! ifзаявление добавляется к .xinitrcпотребности иметь разрывы строк после того, как thenи до fi.
Ти Джей Эллис
Почему вы не используете returnключ вместо ключа numlock enter?
Тимо
Я использовал основную клавишу «Ввод», а не ту, что в цифровой клавиатуре; по какой-то причине включение / выключение numlock тоже имело значение.
Ти Джей Эллис
CentOS 6.7, но с anaconda python, клавиша Enter на NumberPad несколько отличалась от клавиши Enter на главной клавиатуре. NumLock не дал эффекта. Основная клавиатура Enter будет возвращать приглашение «>>>», а NumberPad Enter - пустую строку.
RJT