通过Python运行terminal命令的问题

我正在开发一个小型项目,我需要通过python控制一个控制台播放器。 这个示例命令在Linuxterminal上完美工作:

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 

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

谢谢。

你的默认用户shell可能是bash 。 Python的os.system命令默认在Linux中调用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) 

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

你用os.system产生的shell可能不支持替换的圆括号。