2017-01-28 32 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() 
相關問題