python - 通过 Python 运行终端命令时出现问题

标签 python linux bash

我正在开发一个小项目,我需要通过 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

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

谢谢。

最佳答案

您的默认用户 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 - 通过 Python 运行终端命令时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17584124/

相关文章:

c++ - 我需要在另一个 ""中插入一个 ""

Bash 将浮点结果分配给变量

python - 在 split() 操作后获取 pandas 中唯一的字符串列表

python - python matplotlib动画中的停止/开始/暂停

Python不解析命令行

linux - 在 Linux 中显示所有用户的文件/目录权限

linux - 在 tail -f 输出前面加上文件名

python - 如何在python代码中使用sqoop命令进行增量导入

c++ - 如何比任何其他全局或静态变量更早地创建/构造类实例?

linux - 如何借助shell脚本通过IP知道目标计算机正在使用的操作系统?