системный вызов в Python - PullRequest
0 голосов
/ 28 марта 2012

Я хочу сделать системный вызов в моем коде Python, но проблема в том, что он нарушает последовательность моего исходного кода ..

для примера.

def call_host(self):
    self.builder.get_object("windowMain").show()         
    os.system('python Adder.py')
    self.builder.get_object("window1").show()

в вышеупомянутом pygtkкод, как только Adder.py вызывается, следующая строка не будет выполняться. Я хочу, чтобы система выполнила adder.py и вернулась к моему исходному коду ... спасибо заранее

Вот мой код для Adder.py

import sys
try:  
    import pygtk  
    pygtk.require("2.0")  
except:  
    pass  
try:  
    import gtk  
except:  
    print("GTK Not Availible")
    sys.exit(1)

class adder:
    result = 0

    def __init__( self, number1, number2 ):    
        return None            

    def giveResult( self,number1,number2 ):    
        self.result = int( number1 ) + int( number2 )    
        return str(self.result)

class adderGui:    
    def __init__( self ):    
        self.builder = gtk.Builder()    
        self.builder.add_from_file("Adder.glade")

        dic = { 
            "on_buttonQuit_clicked" : self.quit,    
            "on_buttonAdd_clicked" : self.add,    
            "on_windowMain_destroy" : self.quit,    
        }

        self.builder.connect_signals( dic )

    def add(self, widget):    
        entry1 = self.builder.get_object ("entry1")    
        entry2 = self.builder.get_object ("entry2")

        try:    
            thistime = adder( entry1.get_text(), entry2.get_text() )
        except ValueError:    
            self.builder.get_object("hboxWarning").show()    
            self.builder.get_object("entryResult").set_text("ERROR")    
            return 0

        self.builder.get_object("hboxWarning").show()

        #self.builder.get_object("image1").hide()

        self.builder.get_object("entryResult").set_text(
            thistime.giveResult(entry1.get_text(), entry2.get_text())
        )

    def quit(self, widget):    
        sys.exit(0)

adderGui = adderGui()    
gtk.main()

Ответы [ 2 ]

1 голос
/ 28 марта 2012

os.system запустит команду в подпроцессе и дождется ее завершения перед запуском. Если вы хотите запустить его параллельно с родительским процессом, обратите внимание на модуль subprocess - в частности, вам нужно будет создать объект subprocess.Popen.

1 голос
/ 28 марта 2012

Если вы используете subprocess.Popen, ваша основная программа продолжит работу без «блокировки», пока подпроцесс не завершится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...