【问题标题】:Python not running shell commandPython不运行shell命令
【发布时间】:2022-11-18 00:08:07
【问题描述】:

我正在尝试使用 yt-dlp 下载 youtube 视频。 python 文件使用 yt-dlp 通过使用 subprocess.Open 函数将视频的 URL 手动传递到 python 脚本来下载 youtube 视频。

import subprocess
from moviepy.editor import *
import os
import moviepy.editor as mp

# Download files through url and saves it in yt-vidoes dir
command = "yt-dlp "
URL = 'https://www.youtube.com/watch?v=C_rsdqKA6ok'
parameters = ' --output yt-videos/%(title)s'

def download_video():
   downloading =  subprocess.Popen(command + URL)
   downloading.wait()
   print(downloading.returncode)

download_video()

它在 Windows 上运行良好,但在 Ubuntu 上出现此错误:

Traceback (most recent call last):
  File "/home/purelogics/Arslan/shorts_bot/moveis/movies.py", line 17, in <module>
    download_video()
  File "/home/purelogics/Arslan/shorts_bot/moveis/movies.py", line 13, in download_video
    downloading =  subprocess.Popen(command + URL)
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.10/3.10.8/lib/python3.10/subprocess.py", line 971, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.10/3.10.8/lib/python3.10/subprocess.py", line 1847, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'yt-dlp https://www.youtube.com/watch?v=C_rsdqKA6ok'

【问题讨论】:

  • ...yt-dlp 是该 Ubuntu 系统上 $PATH 上的可执行文件吗?

标签: python subprocess moviepy


【解决方案1】:

来自the docs

将一些参数作为序列传递给外部程序的示例是: Popen(["/usr/bin/git", "提交", "-m", "修复了一个错误。"]) 在 POSIX 上,如果 args 是一个字符串,则该字符串被解释为要执行的程序的名称或路径。但是,这只有在不向程序传递参数的情况下才能完成。

因此,您想将一个列表传递给 Popen,其中列表的第一个元素是可执行文件,第二个元素是参数。正如您现在拥有的那样,它正在尝试查找一个名为 yt-dlp https://www.youtube.com/watch?v=C_rsdqKA6ok 的文件来执行

【讨论】:

    最近更新 更多