Hello
I am new to python and I am really a bad programmer... As a linux user, I use quodlibet for listening to music. Quodlibet allows me to write plugins in python. I am trying to write a plugins to burn a playlist by using cdrecord, and this either in dao or tao mode. The basic of this plugin is the following: - make a temp directory - convert the songs in my playlist into wave files in the temp directory using mplayer and renaming them with 3 digits number so that the order of my playlist is conserved - normalize the wave files - burn the cd - delete the temp directory. At the time, I have a working solution (not fully developped by myself...), but in this solution os.system is used to start the different shell commands and the commands do not have a & at the end. Therefore during the whole execution of the plugin, quodlibet is not responsive. What I would like to is program the whole such that I can use & at the end of the shell commands and each command to be executed one after the other! (I tried to put & simply at the end of each shell command with the result that each where started at the same time) Here is the plugin: ########################################################################### import os, string, re import util import sys import shutil from qltk import ErrorMessage from shutil import copy from plugins.songsmenu import SongsMenuPlugin class _Base(SongsMenuPlugin): PLUGIN_ICON = 'gtk-cdrom' PLUGIN_VERSION = '0.1' # XXX : pb potentiel: si deux utilisateurs utilisent ce plugin # en meme temps, ils vont se marcher sur les pieds... destdir = "/tmp/cd_QL" convert_cmd = "mplayer -ao pcm:file=%(dest)s %(source)s" normalize_cmd = "normalize -m %(path)s/*.wav" burn_cmd = "cdrecord -v -eject %(flags)s -pad -audio %(path)s/*.wav" burn_flags = '' def plugin_songs(self, songs): if not self.check_mplayer(): return self.setup() try: try: for num, song in enumerate(songs): self.makewav(song, num) self.normalize() self.burn() except Exception, e: ErrorMessage( None, "Unknown error", "An error occured while processing files:\n%s." % e ).run() finally: self.teardown() def check_mplayer(self): if not util.iscommand("mplayer"): ErrorMessage( None, "Mplayer not found", "Mplayer is used to convert files in wave files." ).run() return False return True def setup(self): os.mkdir(self.destdir) def makewav(self, song, num): source = song['~filename'].replace(" ", "\ ").replace("'","\\'") dest = os.path.join(self.destdir, "%03d.wav" % num) cmd = self.convert_cmd % dict(source=source, dest=dest) os.system(cmd) def normalize(self): os.system(self.normalize_cmd % dict(path=self.destdir)) def burn(self): flags = self.burn_flags cmd = self.burn_cmd % dict(path=self.destdir, flags=flags) os.system(cmd) def teardown(self): shutil.rmtree(self.destdir) class DAO(_Base): PLUGIN_ID = 'Burn CD w/o blanks' PLUGIN_NAME = _('Burn CD w/o blanks') PLUGIN_DESC = 'Burn CD w/o blanks.' burn_flags = '-dao' class TAO(_Base): PLUGIN_ID = 'Burn CD with blanks' PLUGIN_NAME = _('Burn CD with blanks') PLUGIN_DESC = 'Burn CD with blanks.' # on exporte seulement ces deux classes __all__ = ['DAO', 'TAO'] ############################################################################# and yeah, please consider that I am new to python and do understand something to the thread! Thanks in advance -- Brice Arch Linux (Linux user nb. 372699) ----- "Unix IS user friendly, it is just selective about who his friends are" -- http://mail.python.org/mailman/listinfo/python-list