如何使用子进程执行 shell 命令?
How to execute shell command using subprocess?
我需要执行 shell 命令,使用 youtube-dl
从 youtube url 中提取 mp3 文件
youtube-dl https://www.youtube.com/watch?v=BaW_jenozKc --extract-audio --audio-format mp3 -o '/var/www/html/ytrip/audio/%(id)s.%(ext)s'
在终端上执行这一行,生成mp3文件并存储在var/www/html/ytrip/audio/BaW_jenozKc.mp3
.
现在在 flask 上实现了:
# flaskapp.py
# This is a "hello world" app sample for flask app. You may have a different file.
from flask import Flask, render_template, request
import subprocess
app = Flask(__name__, static_url_path='',
static_folder='web/static',
template_folder='web/templates')
@app.route('/')
def index():
return render_template("index.html")
@app.route('/audios', methods=['POST', 'GET'])
def audios():
if request.method == 'POST':
subprocess.call(['youtube-dl', 'https://www.youtube.com/watch?v=BaW_jenozKc --extract-audio --audio-format mp3 -o /var/www/html/ytrip/audio/%(id)s.%(ext)s'])
return render_template("audios.html")
if __name__ == '__main__':
app.run()
这不会引发任何错误,也不会提取 mp3 文件。不确定如何使用 subproces.call()
...
也尝试过 subprocess.run()
,但没有成功
命令的每个参数都必须是一个单独的列表元素。
subprocess.call([
'youtube-dl',
'https://www.youtube.com/watch?v=BaW_jenozKc',
'--extract-audio',
'--audio-format', 'mp3',
'-o', '/var/www/html/ytrip/audio/%(id)s.%(ext)s'
])
我需要执行 shell 命令,使用 youtube-dl
从 youtube url 中提取 mp3 文件youtube-dl https://www.youtube.com/watch?v=BaW_jenozKc --extract-audio --audio-format mp3 -o '/var/www/html/ytrip/audio/%(id)s.%(ext)s'
在终端上执行这一行,生成mp3文件并存储在var/www/html/ytrip/audio/BaW_jenozKc.mp3
.
现在在 flask 上实现了:
# flaskapp.py
# This is a "hello world" app sample for flask app. You may have a different file.
from flask import Flask, render_template, request
import subprocess
app = Flask(__name__, static_url_path='',
static_folder='web/static',
template_folder='web/templates')
@app.route('/')
def index():
return render_template("index.html")
@app.route('/audios', methods=['POST', 'GET'])
def audios():
if request.method == 'POST':
subprocess.call(['youtube-dl', 'https://www.youtube.com/watch?v=BaW_jenozKc --extract-audio --audio-format mp3 -o /var/www/html/ytrip/audio/%(id)s.%(ext)s'])
return render_template("audios.html")
if __name__ == '__main__':
app.run()
这不会引发任何错误,也不会提取 mp3 文件。不确定如何使用 subproces.call()
...
也尝试过 subprocess.run()
,但没有成功
命令的每个参数都必须是一个单独的列表元素。
subprocess.call([
'youtube-dl',
'https://www.youtube.com/watch?v=BaW_jenozKc',
'--extract-audio',
'--audio-format', 'mp3',
'-o', '/var/www/html/ytrip/audio/%(id)s.%(ext)s'
])