Cómo manejar el bloqueo de subprocesos en Windows
Estoy ejecutando un script de Python desde el símbolo del sistema de Windows. Llama a la función a continuación, que convierte un archivo MP3 en un archivo wave usandoCOJ.
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
Desafortunadamente, LAME siempre se bloquea (y hace honor a su nombre) en ciertos MP3. Aparece el cuadro de diálogo de Windows "Su programa se ha bloqueado", que congela mi script. Una vez que cierro el cuadro de diálogo de Windows, se levanta la excepción AudioProcessingException. En lugar de tener que decirle a Windows que se calle, me gustaría que la secuencia de comandos genere la excepción y luego pasar al siguiente MP3.
¿Hay alguna forma de evitar esto? Preferiblemente alterando el script en lugar de ejecutarlo con Unix.
Estoy usando Windows 7 y Python 2.6