python中的系统调用

时间:2012-03-28 15:36:57

标签: python system-calls os.system

我想在我的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并回到原来的代码...... thnx提前

这是我的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 个答案:

答案 0 :(得分:1)

如果使用subprocess.Popen,主程序将继续运行而不会“阻塞”,直到子进程终止。

答案 1 :(得分:1)

os.system将在子进程中运行命令并等待它在运行之前完成。如果您想与父进程并行运行它,那么您应该查看subprocess模块 - 特别是,您将要创建一个subprocess.Popen对象。