2

我正在做一个小项目,我需要通过 python 控制控制台播放器。此示例命令在 Linux 终端上完美运行:

mplayer -loop 0 -playlist <(find "/mnt/music/soundtrack" -type f | egrep -i '(\.mp3|\.wav|\.flac|\.ogg|\.avi|\.flv|\.mpeg|\.mpg)'| sort)

在 Python 中,我正在执行以下操作:

command = """mplayer -loop 0 -playlist <(find "/mnt/music/soundtrack" -type f | egrep -i '(\.mp3|\.wav|\.flac|\.ogg|\.avi|\.flv|\.mpeg|\.mpg)'| sort)""" 
os.system(command)

问题是当我使用 Python 尝试它时,它会在我运行它时给我一个错误:

sh: 1: Syntax error: "(" unexpected

我在这里真的很困惑,因为它是完全相同的字符串。为什么第二种方法不起作用?

谢谢。

4

3 回答 3

3

您的默认用户 shell 可能是bash. 在 Linux 中默认os.system调用Python 的命令。sh

一种解决方法是使用subprocess.check_call()shell=True作为参数传递,以告知subprocess使用您的默认用户 shell 执行。

import subprocess
command = """mplayer -loop 0 -playlist <(find "/mnt/music/soundtrack" -type f | egrep -i '(\.mp3|\.wav|\.flac|\.ogg|\.avi|\.flv|\.mpeg|\.mpg)'| sort)"""
subprocess.check_call(command, shell=True)
于 2013-07-11T02:37:10.870 回答
1

您的 python 调用 'os.system' 可能只是使用与您在终端上使用的不同的 shell: os.system() 在哪个 linux shell 下执行命令?

您使用 os.system 生成的 shell 可能不支持括号进行替换。

于 2013-07-11T02:37:17.307 回答
0
import subprocess  
 
COMND=subprocess.Popen('command',shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
COMND_bytes = COMND.stdout.read() + COMND.stderr.read()  
print(COMND_bytes)
于 2021-06-21T12:35:28.977 回答