2013-04-15 437 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

谢谢。我会看看是否可以让服务器准备好处理这个问题。 :) –