Почему я могу запустить эту команду из терминала, но я получаю ошибку, когда мой питон запускает ее из терминала для меня? - PullRequest
2 голосов
/ 09 мая 2019

Я пытаюсь написать скрипт на python, который в основном захватывает видео с веб-камеры с терминала. Когда я помещаю команду в строку и использую subprocess.call(script, True), я получаю сообщение об ошибке, но когда я буквально копирую / вставляю эту же команду в терминал, она работает нормально.

Это мой питон:

import subprocess
import os
if (os.path.isdir("Videos/Webcam/temp") is False):
    dirmake = 'mkdir Videos/Webcam/temp'
    subprocess.call(dirmake, True)
cmd = 'ffmpeg -f v4l2 -i /dev/video0 -t 00:00:10 video.webm'
subprocess.call(cmd, True)

и это ошибка

`FileNotFoundError: [Errno 2] No such file or directory: 'ffmpeg -f v4l2 -i /dev/video0 -t 00:00:10 video.webm': 'ffmpeg -f v4l2 -i /dev/video0 -t 00:00:10 video.webm'`

Если я просто запускаю ffmpeg -f v4l2 -i /dev/video0 -t 00:00:10 video.webm из терминала, он работает нормально.

Изначально видео должно было идти в Videos / Webcam / temp, но я взял его, чтобы посмотреть, не связана ли ошибка с тем, куда я помещал видео. Я использую Ubuntu 18.04.2 LTS, если это имеет значение.

1 Ответ

2 голосов
/ 10 мая 2019

При использовании модуля подпроцесса вы обычно передаете ему свою команду в виде списка строк, а не всю команду, которую вы хотите выполнить.

Например, вместо subprocess.call('ls -l /my/dir'), который выдаст ошибку, вы должны использовать subprocess.call(['ls', '-l', '/my/dir'])

Подробнее о модуле подпроцесса здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...