3

Python プログラムから mplayer の音量を制御しようとしています。mplayer プログラムは、bash スクリプトから開始されます。

#!/bin/bash
mkfifo /home/administrator/files/mplayer-control.pipe
/usr/bin/mplayer -slave -input file=/home/administrator/files/mplayer-control.pipe /home/administrator/music/file.mp3

次に、再生中の mplayer のインスタンスの音量を制御できるようにするための Python で記述された GUI があります。私は次のことを試しました:

os.system('echo "set_property volume $musicvol" > /home/administrator/files/mplayer-control.pipe')

$musicvol を代わりに数値に置き換えれば機能しますが、残念ながらそれは役に立ちません。変数を渡すことができる必要があります。

Python アプリケーションから bash スクリプトを呼び出して解決することもできますが、それを機能させることもできません。

subprocess.call("/home/administrator/files/setvolume.sh", executable="bash", shell=True)
4

1 に答える 1

7

Python スクリプトからその行を FIFO に書き込むために、シェルを呼び出して呼び出す必要はありませんos.system。次のようにするだけです。

new_volume = 50
with open("/home/administrator/files/mplayer-control.pipe","w") as fp:
    fp.write("set_property volume %d\n" % (new_volume,))

ただし、元のpythonで何が起こると予想されるかは明確ではありません-musicvol環境に設定されていますか?代わりに、渡す文字列に挿入する Python 変数の場合、%上記の例で行ったように、文字列補間演算子 ( ) を使用するのが最も簡単な方法です。

使用例では、実行可能で行がある場合、またはキーワード引数subprocess.callは必要ありません-次のようにするだけです:executableshellsetvolume.sh#!

subprocess.call("/home/administrator/files/setvolume.sh")

ただし、上記のように Python ではopenandをそのまま使用する方がよいwriteと思います。

于 2011-01-19T11:13:19.347 に答える