2017-01-28 7 views
1

os.system()コマンドを複数引数で実行したいと考えています。複数の引数でos.system()を実行するにはどうすればいいですか

def playmp3(SongName, Freqency): 
    os.system("sox -t mp3", SongName, "-t wav - | sudo pifmrds -freq", Freqency, "-audio", SongName) 

しかし、私はいつもこのエラーが出る:

>>> playmp3("/home/pi/music/hit_the_street2.wav", "105") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in playmp3 
TypeError: system() takes exactly 1 argument (6 given) 

答えて

1

あなたがすることはできません。あなたは、コマンドラインはformatを使用してインスタンスのために、自分自身を構成する必要があります:

os.system('sox -t mp3 "{0}" -t wav - | sudo pifmrds -freq "{1}" -audio "{0}"'.format(SongName,Frequency)) 

回以上のパラメータを使用することができます01表記に注意してください。

とスペースが含まれているかどうかわからない場合は、引数を引用符で保護してください。

これは実際にはシステムコールを実行するための古い方法です。それは素早く&が汚いですが、2 subprocess.Popenが連鎖しており、制御された引数渡しは次のようにもっときれいになります:

proc1 = subprocess.Popen(["sox","-t","mp3",SongName,"-t","wav","-"],stdout=subprocess.PIPE) 
proc2 = subprocess.Popen(["sudo","pifmrds","-freq",str(Frequency),"-audio",SongName],stdin=proc1.stdout) 
proc2.wait() 
関連する問題