1

我正在编写一个脚本,该脚本使用其中一种os.exec*方法在 VLC 媒体播放器中打开媒体文件。我在 Windows 10 上使用 Python v3.6。

VLC 打开时出现错误,指出文件无法打开,但是文件的路径也错误。它显示了以我的主目录开头的文件路径,后跟文件名的最后一部分,以空格分隔。

例子:

  • 我在路径上有一个视频D:\videos\SuperCoolVideo - Part1.mp4
  • VLC 尝试在路径中打开此C:\Users\user\Part1.mp4视频

我正在使用的代码如下:

import os

MEDIA_PLAYER = 'C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe'
video = 'D:\\videos\\SuperCoolVideo - Part1.mp4'
os.execv(MEDIA_PLAYER, [video]) # or os.execl(MEDIA_PLAYER, video)

VLC的错误:

Your input can't be opened:
VLC is unable to open the MRL 'fd://0'. Check the log for details.

Your input can't be opened:
VLC is unable to open the MRL 'file:///C:/Users/user/Part1.mp4'. Check the log for details.

我认为(但不完全确定)这是因为我必须定义视频的路径或正确地转义路径,但我在研究如何正确处理将路径传递给 VLC 方面一直没有成功。

我也试过使用os.system()无济于事。我收到以下错误消息:

The filename, directory name, or volume label syntax is incorrect.


* 注意:我应该补充一点,我不能使用 subprocess.call('path\to\vlc.exe') ,因为我需要脚本在 VLC 打开后立即结束。使用 subprocess.call() 会导致脚本保持运行,直到我关闭 VLC。

4

1 回答 1

0

感谢 Hans Lehnert 和 Charles Duffy 在上述问题的评论中的帮助,我让它正常工作。有两个改变是必要的。

  1. 在 Windows 上,有必要在任何可能包含传递给的空格的参数周围加上引号os.execv。但是,这在基于 UNIX 的系统上可能是有害的,因此如果您正在使用它,请不要担心。示例 →'"'+path+'"''"{}"'.format(path)
  2. 再次,第一个参数必须是您的执行过程。我将引用查尔斯的评论,因为他解释得很好。

    Windows 是它自己非常奇怪的鸟,但在类 UNIX 操作系统上,您的列表从 开始argv[0],因此如果您希望参数是argv[1],则需要使用os.execv(MEDIA_PLAYER, [MEDIA_PLAYER, video])。”

解决方案

因此,我一起在 VLC 中正确打开文件,方法是将参数用引号括起来并将可执行文件作为第一个参数传递os.execv

os.execv(MEDIA_PLAYER, ['"'+MEDIA_PLAYER+'"', '"'+video+'"'])

于 2018-07-06T03:21:03.993 回答