I am running a python script from windows command prompt. It calls the function below, which converts an MP3 file to a wave file using LAME.
def convert_mp3_to_wav(input_filename, output_filename):
"""
converts the incoming mp3 file to wave file
"""
if not os.path.exists(input_filename):
raise AudioProcessingException, "file %s does not exist" % input_filename
command = ["lame", "--silent", "--decode", input_filename, output_filename]
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(stdout, stderr) = process.communicate()
if process.returncode != 0 or not os.path.exists(output_filename):
raise AudioProcessingException, stdout
return output_filename
Unfortunately LAME always crashes (and lives up to its name) on a certain MP3s. The Windows "Your program has crashed" dialog appears, which freezes my script. Once I close the windows dialog, the AudioProcessingException is raised.
Instead of having to tell Windows to shut up, I'd just like the script to raise the exception and then move onto the next MP3.
Is there any way around this? Preferably by altering the script rather than running it with Unix.
I am using Windows 7, and Python 2.6
After some more googling, I stumbled upon this
http://www.activestate.com/blog/2007/11/supressing-windows-error-report-messagebox-subprocess-and-ctypes
It required a bit of tinkering, but the method below now doesn't get annoying Windows messages :)
Note the creationflags=subprocess_flags in the subprocess.Popen too
def convert_mp3_to_wav(input_filename, output_filename):
if sys.platform.startswith("win"):
# Don't display the Windows GPF dialog if the invoked program dies.
# See comp.os.ms-windows.programmer.win32
# How to suppress crash notification dialog?, Jan 14,2004 -
# Raymond Chen's response [1]
import ctypes
SEM_NOGPFAULTERRORBOX = 0x0002 # From MSDN
ctypes.windll.kernel32.SetErrorMode(SEM_NOGPFAULTERRORBOX);
subprocess_flags = 0x8000000 #win32con.CREATE_NO_WINDOW?
else:
subprocess_flags = 0
"""
converts the incoming mp3 file to wave file
"""
if not os.path.exists(input_filename):
raise AudioProcessingException, "file %s does not exist" % input_filename
#exec("lame {$tmpname}_o.mp3 -f {$tmpname}.mp3 && lame --decode {$tmpname}.mp3 {$tmpname}.wav");
command = ["lame", "--silent", "--decode", input_filename, output_filename]
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, creationflags=subprocess_flags)
(stdout, stderr) = process.communicate()
if process.returncode != 0 or not os.path.exists(output_filename):
raise AudioProcessingException, stdout
return output_filename