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

通过Python运行终端命令时出现问题,python,linux,bash,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) 我真的很困惑,因为它是完全相同的字符串。为什么第二种方法不起作用 谢谢。您的默认用户shell可能是bash。默认情

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

mplayer -loop 0 -playlist <(find "/mnt/music/soundtrack" -type f | egrep -i '(\.mp3|\.wav|\.flac|\.ogg|\.avi|\.flv|\.mpeg|\.mpg)'| sort)
我真的很困惑,因为它是完全相同的字符串。为什么第二种方法不起作用


谢谢。

您的默认用户shell可能是
bash
。默认情况下,linux中Python的
os.system
命令调用
sh

一种解决方法是使用
子流程。选中\u call()
并将其作为参数传递,以告知
子流程使用默认用户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)
导入子流程

command=“”mplayer-loop 0-playlist默认情况下,linux中默认的用户shell可能是
bash
。Python的
os.system
命令调用
sh

一种解决方法是使用
子流程。选中\u call()
并将其作为参数传递,以告知
子流程使用默认用户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)
导入子流程

command=“”mplayer-loop 0-playlist您的python调用“os.system”可能只是使用了与您在终端上使用的不同的shell:


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

您的python调用“os.system”可能只是使用了与您在终端上使用的shell不同的shell:


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

他正在使用
,谢谢您的更正。我刚刚学到了一些新东西。这里有一个解释给任何想要它的人:他正在使用
,谢谢你的更正。我刚刚学到了一些新东西。这里有一个对其他任何想要它的人的解释:我尝试了你所建议的,但是出现了一个不同的错误:
/bin/sh:1:语法错误:“(
,带有回溯
…返回非零退出状态2
。还尝试了这个
subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
但是我得到了
/bin/sh:1:语法错误:“(“意外的
。尝试了很多东西,但似乎没有任何效果…非零退出通常表示Linux中的命令失败。我会查看
mplayer
文档以了解错误是什么(如果有)。好的,我相信我会很快让它工作。至少我现在知道它不工作的原因。谢谢。我尝试了你建议的方法,但是出现了不同的错误:
/bin/sh:1:语法错误:“((“意外的
带有回溯
…返回非零退出状态2
。还尝试了此
子流程。Popen(command,shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
但是我得到了
/bin/sh:1:语法错误:“(“意外的
。尝试了很多事情,但似乎没有任何效果…非零出口通常表示Linux中的命令失败。我会检查
mplayer
文档以找出错误所在(如果有的话)。好的,我相信我会很快让它工作。至少我现在知道它为什么不工作了。谢谢。
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)