首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用子进程从python执行命令时,“无效参数”

使用子进程从python执行命令时,“无效参数”
EN

Stack Overflow用户
提问于 2022-08-25 13:49:46
回答 1查看 59关注 0票数 0

我想从python执行一个命令。这是原始命令:

代码语言:javascript
运行
复制
yt-dlp -f bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best --downloader ffmpeg --downloader-args "ffmpeg_i:-ss 00:19:10.00 -to 00:19:40.00" --no-check-certificate https://youtu.be/YXfnjrbmKiQ

所以我要这么做:

代码语言:javascript
运行
复制
import subprocess

result = subprocess.call(['yt-dlp','-f','bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best','--downloader','ffmpeg','--downloader-args','"ffmpeg_i:-ss 00:00:10.00 -to 00:00:40.00"','--no-check-certificate','https://youtu.be/YXfnjrbmKiQ'])

print(result)

但它给了我一个错误:

代码语言:javascript
运行
复制
ffmpeg_i:-ss 00:00:10.00 -to 00:00:40.00: Invalid argument

我怎么才能修好它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-25 18:32:51

在不使用shell=True的情况下运行时,元素'"ffmpeg_i:-ss 00:00:10.00 -to 00:00:40.00"'中不需要" ",因为通常只有shell才需要它来识别哪个元素保持为一个字符串,但后来shell将这个字符串发送到没有" "的系统中。

代码语言:javascript
运行
复制
import subprocess

result = subprocess.call([
    'yt-dlp', 
    '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'
    '--downloader', 'ffmpeg'
    '--downloader-args', 'ffmpeg_i:-ss 00:19:10.00 -to 00:19:40.00'
    '--no-check-certificate',
    'https://youtu.be/YXfnjrbmKiQ'
])

print(result)

或者您可以使用shell=True运行它,然后需要单个字符串,并且必须使用" "

代码语言:javascript
运行
复制
import subprocess

result = subprocess.call(
   'yt-dlp -f bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best --downloader ffmpeg --downloader-args "ffmpeg_i:-ss 00:19:10.00 -to 00:19:40.00" --no-check-certificate https://youtu.be/YXfnjrbmKiQ',
   shell=True
)

print(result)

BTW:

有标准模块shlex,它可以将带有命令的字符串转换为参数列表。

代码语言:javascript
运行
复制
import shlex

cmd = 'yt-dlp -f bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best --downloader ffmpeg --downloader-args "ffmpeg_i:-ss 00:19:10.00 -to 00:19:40.00" --no-check-certificate https://youtu.be/YXfnjrbmKiQ'

cmd = shlex.split(cmd)

print(cmd)

结果显示该元素没有" "

代码语言:javascript
运行
复制
['yt-dlp', 
'-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best', 
'--downloader', 'ffmpeg', 
'--downloader-args', 'ffmpeg_i:-ss 00:19:10.00 -to 00:19:40.00', 
'--no-check-certificate', 'https://youtu.be/YXfnjrbmKiQ']
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73488730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档