我正在开发一个小型项目,我需要通过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可能不支持替换的圆括号。