Не удается правильно открыть файл в VLC с помощью Python's os.execv или os.execl в Windows - PullRequest
0 голосов
/ 06 июля 2018

Я работаю над сценарием, который открывает медиа-файлы в VLC Media Player одним из методов os.exec*. Я использую Python v3.6 на Windows 10.

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.

1 Ответ

0 голосов
/ 06 июля 2018

Я все заработал правильно благодаря помощи Ханса Ленерта и Чарльза Даффи в комментариях к вопросу выше.Было необходимо два изменения.

  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+'"'])

...