If you do want to use threading, then I agree with your approach and Emmanuel's suggestions. However, you do not need to use threading at all for this task (in my opinion, you should always avoid using threads if possible). <div>

<br></div><div>My approach would be:</div><div>1) use subprocess.Popen to execute the command</div><div>2) use a timer and Popen.poll() to check for process completion</div><div>     or even more simply, just use Popen.wait()</div>

<div><br></div><div>It would also be very simple with this approach to monitor the output of the process and to allow the user to terminate the process early.</div><div><br></div><div>Luke</div><div><br><div class="gmail_quote">

On Wed, May 11, 2011 at 02:07, vijay swaminathan <span dir="ltr"><<a href="mailto:swavijay@gmail.com">swavijay@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hi All,<br><br>I'm new bie to python and programming and would like to get some assistance on the problem stated below.<br><br>I'm developing a GUI (using pyqt) to run some scripts (which were run on command line earlier).<br>


<br>on the GUI I have a run button which calls a .bat file , which has the list of scripts to execute. Once the run button is clicked, the run button is disabled as  it invokes a command prompt, calls a .bat file and when I close the command prompt, I would like to re-enable the Run button.<br>


<br>Since I wanted to monitor the command prompt, I thought of invoking the command prompt on a thread and monitor the thread. Correct me if I went techinically incorrect here.<br><br>Run button on GUI:  - Here I call the runscript ()<br>


 self.connect(self.run_button, SIGNAL('clicked()'), self.runscript)<br clear="all"><br>def runscript(self):<br>        file_operation.Generate_Bat_File(self.complete_file_path) # Generate a bat file.<br>         <br>


        self.timer = QTimer() # invoke timer for starting and monitoring the thread.<br>        self.timer.connect(self.timer, SIGNAL("timeout()"),self.sendData) <br>        self.timer.start(1000) <br><br>class RunMonitor(QThread):<br>


    def __init__(self, parent=None):<br>        QThread.__init__(self)<br>    def run(self):<br>        print 'Invoking Command Prompt..........'<br>        subprocess.call(["start", "/DC:\\Scripts", "scripts_to_execute.bat"], shell=True)<br>


<br>def sendData(self):<br>                <br>        if self.run_timer:<br>            run_monitor_object = RunMonitor()<br>            print 'Starting the thread...........'<br>            run_monitor_object.start()<br>


 <br>        if run_monitor_object.isRunning():<br>            print 'The Thread is still Alive .......'<br>            <br>        if run_monitor_object.isFinished():<br>            print 'The Thread is not alive anymore......'<br>


    <br>I doubt the following.<br><br><a href="http://1.is" target="_blank">1.is</a> this the correct way to monitor the thread? if not any help towards this is appreciated.<br>2. Is this the correct way to invoke the command prompt in thread?<br>


3. is it safe to assume that as long as the command prompt is alive, the thread is active and when command prompt is closed, the thread is no more active.<br><br>Please help.....<br><br>Eagerly looking forward for some help....I googled enough but could not arrive at a solution.<br>


<br>-- <br><font color="#888888">Vijay Swaminathan<br>
</font><br>_______________________________________________<br>
PyQt mailing list    <a href="mailto:PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><br>
<a href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt" target="_blank">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a><br></blockquote></div><br></div>