通过Python运行终端命令时出现问题
我正在做一个小项目,需要通过python控制一个控制台播放器。此示例命令在Linux终端上运行良好:通过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。默认情
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)