2013-04-15 439 views
0

我在同一個目錄中有三個文件。一個是python腳本,它需要argumenet。一個是帶有javascript的html頁面。最後一個是源文件.wav文件。使用Javascript執行帶有參數的Python腳本的網頁

./myfolder/sound_manipulation.py 
./myfolder/volume_slider.html 
./myfolder/the_song.wav 

的sound_manipulation.py文件可以等執行:

python sound_manipulation.py -v 50 

並生成一個新的wav文件,new_song.wav,基於the_song.wav,但只有具有原始的50%音量級別。另一方面,volume_slider.html包含一個從0到100%的滑塊,以及一個調用onclick javascript函數update_vol()的按鈕。

到目前爲止,update_vol()提醒滑塊的值,這就是全部。

function update_vol() { 
    var vol = document.getElementById('vol_slider').value; 
    alert(vol); 
} 

但我想update_vol()實際執行使用卷的Python腳本。

我該如何做到這一點?

此外,當執行「python sound_manipulation.py -v 50」時,如何將new_song.wav的位置返回到volume_slider.html?

請幫忙。謝謝!

回答

0

嗯,好吧,我想你的運氣不好。瀏覽器腳本不能在您的系統上執行任何操作(因此沒有Python腳本)。正如我相信你可以想象的那樣,這可能會帶來巨大的安全風險 - 這正是微軟ActiveX所帶來的麻煩。

我假設你要創建該腳本的圖形界面,讓另外,您可以:

  • 做一個JavaScript相當於您的Python腳本,如果你確實需要HTML
  • 或者創建一個接口在QT,GTK等中。順便說一句,Python可以很輕鬆地做到這一點!
1

最簡單最粗糙的一次性cgi腳本可能會解決您的問題。

設置一個cgi腳本/環境,只需從用戶獲得volume值,然後使用subprocess模塊來處理.wav文件並將其發回給用戶。如果你需要更多的東西,建立你自己的網絡應用程序。

import cgi 
import subprocess 
import sys 
form = cgi.FieldStorage() 
volume = form.getfirst('volume') #read from form 'volume' 

subprocess.call(['python', 'sound_manipulation.py', '-v', volume]) 

with open('new_song.wav', 'rb') as wav_file: 
    print("Content-Type: audio/wav\n") 
    sys.stdout.write(wav_file.read()) 
+0

謝謝。我會看看是否可以讓服務器準備好處理這個問題。 :) –