【问题标题】:How to add to VLC playlist queue using Python subprocess如何使用 Python 子进程添加到 VLC 播放列表队列
【发布时间】:2015-03-21 22:34:24
【问题描述】:

我正在尝试使用 Python 2.7 subprocess 库以编程方式将歌曲添加到 VLC 播放器队列。

通过herehere,我可以启动 VLC 播放器并播放歌曲(或从一开始就排队播放歌曲);

from subprocess import Popen
vlcpath = r'C:\Program Files (x86)\VideoLAN\VLC\vlc.exe'
musicpath1 = r'path\to\song1.mp3'
musicpath2 = r'path\to\song2.mp3'
p = Popen([vlcpath,musicpath1]) # launch VLC and play song
p = Popen([vlcpath,musicpath1,musicpath2]) # launch VLC and play/queue songs

问题是我不知道启动时的整个队列播放列表。我希望能够将歌曲添加到已经运行的 VLC 进程的队列中。请问我该怎么做?

来自here,我认为合适的命令行入口是:

vlc.exe --started-from-file --playlist-enqueue "2.wmv"

但我不知道在subprocess 中执行此操作的语法。我尝试了几件事,但都无法工作:

  • 再次调用Popen(打开一个新进程)
  • 调用p.communicate(我以为这是输入stdin命令的方法)

【问题讨论】:

    标签: python python-2.7 subprocess vlc


    【解决方案1】:

    要运行命令:vlc.exe --started-from-file --playlist-enqueue "2.wmv" 在 Windows 上使用 subprocess 模块:

    from subprocess import Popen
    
    cmd = 'vlc.exe --started-from-file --playlist-enqueue "2.wmv"'
    p = Popen(cmd) # start and forget
    assert not p.poll() # assert that it is started successfully
    

    等待命令完成:

    from subprocess import check_call
    
    check_call(cmd) # start, wait until it is done, raise on non-zero exit status
    

    但是如何在同一个 p 进程上再次运行该命令? 您的代码启动了一个新的 VLC 实例,而不是在其上运行 已经打开的 p 的顶部。我发现如果我手动多次运行vlc.exe --started-from-file --playlist-enqueue "2.wmv" 命令(在命令提示符窗口中),它会正确启动 vlc( 第一次),然后添加到队列中(在后续调用中)。所以我想我 只需要能够多次运行您建议的代码“on 自顶”

    每个Popen() 启动一个新进程。每次您在命令行中手动运行命令时,它会启动一个新进程。无论是保留多个 vlc 实例还是运行不同的命令(不同的命令行参数),都可能取决于系统上当前的 vlc 配置。

    【讨论】:

    • 谢谢。但是如何在同一个p 进程上第二次 运行该命令?您的代码会启动一个新的 VLC 实例,而不是在已经打开的 p 之上运行它。我发现如果我手动(在命令提示符窗口中)多次运行 vlc.exe --started-from-file --playlist-enqueue "2.wmv" 命令,它会正确启动 vlc(第一次),然后添加到队列(在后续调用中)。所以我认为我只需要能够“在其自身之上”多次运行您建议的代码。
    • 谢谢!一直以来,我都在避免启动新进程,因为我以某种方式假设命令行将在同一个进程上运行。无论如何,根据您的评论,我在 VLC 首选项中进行了挖掘,发现由于我启用了几个选项,一切都按预期工作:Allow only one instanceEnqueue items into playlist in one instance mode。仍然不确定为什么这种排队行为在命令行中本机起作用,而不是从 Python 子进程中起作用——我认为它们做同样的事情。
    猜你喜欢
    • 2015-04-11
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多