子进程调用 bash 脚本
Subprocess call bash script
我正在尝试调用 python class,其中包含对 bash 脚本的子进程调用。
def downloadURL(self,address):
call(['bash youtube2mp3_2.sh', str(address)],shell=True)
这是 bash 脚本:
#!/bin/bash
# Script for grabbing the audio of youtube videos as mp3.
address=
user_name= # todo
path_music=/home/pi/music_loaded
echo Address : $address
#title=$(youtube-dl --get-title $address)
youtube-dl --no-playlist -x --audio-format mp3 -o $path_music/'%(title)s.% (ext)s' $address
echo ----Download finshed----
调用方法 downloadURl 时,我传递了一个静态 youtube link。在 python 方法中打印他 return 正确。
但是脚本中的回显return“”在控制台中。所以我认为我试图传递的参数没有传递给脚本。
有人有想法吗?
要么将参数作为字符串传递
def downloadURL(self,address):
call('bash youtube2mp3_2.sh '+address)
或作为列表
def downloadURL(self,address):
call(['bash','youtube2mp3_2.sh',address])
两者都有效,但后者更好,因此 space 必要时会引用字符。
(顺便说一句,因为您在命令前加上 bash
,所以您不需要 shell=True
)
第三种选择:让系统根据shebang选择使用哪个解释器:
def downloadURL(self,address):
call(['youtube2mp3_2.sh',address],shell=True)
PS:您传递的参数 ['bash youtube2mp3_2.sh', str(address)]
使 call
添加引号到第一个,因为它包含 spaces,我不知道Linux 上到底发生了什么,但我在 windows 上进行了测试,我得到了一个 "syntax error",没有执行任何操作。 (使用固定代码,我的路径中有 MSYS bash
)
PS2:为什么要从 python 调用如此简单的 bash 脚本。在 python:
中完成
def downloadURL(self,address):
path_music="/home/pi/music_loaded"
rc=call(["youtube-dl","--no-playlist","-x","--audio-format","mp3","-o",os.path.join(path_music,'%(title)s.% (ext)s'),address])
if rc==0:
print("Download OK")
我正在尝试调用 python class,其中包含对 bash 脚本的子进程调用。
def downloadURL(self,address):
call(['bash youtube2mp3_2.sh', str(address)],shell=True)
这是 bash 脚本:
#!/bin/bash
# Script for grabbing the audio of youtube videos as mp3.
address=
user_name= # todo
path_music=/home/pi/music_loaded
echo Address : $address
#title=$(youtube-dl --get-title $address)
youtube-dl --no-playlist -x --audio-format mp3 -o $path_music/'%(title)s.% (ext)s' $address
echo ----Download finshed----
调用方法 downloadURl 时,我传递了一个静态 youtube link。在 python 方法中打印他 return 正确。
但是脚本中的回显return“”在控制台中。所以我认为我试图传递的参数没有传递给脚本。
有人有想法吗?
要么将参数作为字符串传递
def downloadURL(self,address):
call('bash youtube2mp3_2.sh '+address)
或作为列表
def downloadURL(self,address):
call(['bash','youtube2mp3_2.sh',address])
两者都有效,但后者更好,因此 space 必要时会引用字符。
(顺便说一句,因为您在命令前加上 bash
,所以您不需要 shell=True
)
第三种选择:让系统根据shebang选择使用哪个解释器:
def downloadURL(self,address):
call(['youtube2mp3_2.sh',address],shell=True)
PS:您传递的参数 ['bash youtube2mp3_2.sh', str(address)]
使 call
添加引号到第一个,因为它包含 spaces,我不知道Linux 上到底发生了什么,但我在 windows 上进行了测试,我得到了一个 "syntax error",没有执行任何操作。 (使用固定代码,我的路径中有 MSYS bash
)
PS2:为什么要从 python 调用如此简单的 bash 脚本。在 python:
中完成def downloadURL(self,address):
path_music="/home/pi/music_loaded"
rc=call(["youtube-dl","--no-playlist","-x","--audio-format","mp3","-o",os.path.join(path_music,'%(title)s.% (ext)s'),address])
if rc==0:
print("Download OK")