2

私は 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

まったく同じ文字列なので、ここで本当に混乱しています。2 番目の方法が機能しないのはなぜですか?

ありがとう。

4

3 に答える 3

3

デフォルトのユーザー シェルはおそらくbash. Linux では、デフォルトでPython のos.systemコマンドが呼び出されます。sh

回避策は、デフォルトのユーザー シェルを使用して実行するように指示する引数として使用subprocess.check_call()して渡すことです。shell=Truesubprocess

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)
于 2013-07-11T02:37:10.870 に答える
1

あなたのpython呼び出し 'os.system'はおそらく、端末で使用しているシェルとは異なるシェルを使用しているだけです: os.system() execute command under which linux shell?

os.system で生成したシェルは、置換用の括弧をサポートしていない場合があります。

于 2013-07-11T02:37:17.307 に答える