2013-02-28 121 views
0

我想知道是否有可能在任何給定的點在一個基本的Python腳本中執行一個動作,所以說它什麼時候關閉。我有以下代碼來尋找素數(只是爲了好玩)作爲python腳本關閉執行一個動作

number = 1 
primelist = [] 
nonprime = [] 

while number < 1000: 

    number += 1 

    for i in range(number): 
     if i != 1 and i != number and i !=0: 
      if number%i == 0: 
       nonprime.append(number) 
      else: 
       primelist.append(number) 

nonprimes = open("nonprimes.txt", "w") 

for nonprime in set(primelist) & set(nonprime): 
    nonprimes.write(str(nonprime) + ", ") 

nonprimes.close() 

所以基本上我想運行最後一部分,因爲腳本停止。如果這是不可能的,有什麼方法可以讓我在程序運行時按「空格」,然後保存列表?

乾杯提前:)

編輯:

我已經修改了代碼,包括atexit對模塊的建議,但它似乎沒有奏效。那就是:

導入時,atexit對

class primes(): 



    def __init__(self): 

     self.work(1) 

    def work(self, number): 

     number = 1 
     self.primelist = [] 
     self.nonprime = [] 

     while number < 20: 
      time.sleep(0.1) 
      print "Done" 

      number += 1 

      for i in range(number): 
       if i != 1 and i != number and i !=0: 
        if number%i == 0: 
         self.nonprime.append(number) 
        else: 
         self.primelist.append(number) 

     nonprimes = open("nonprimes.txt", "w") 

     for nonprime in set(self.primelist) & set(self.nonprime): 
      nonprimes.write(str(nonprime) + ", ") 

     nonprimes.close() 


    def exiting(self, primelist, nonprimelist): 
     primelist = self.primelist 
     nonprimelist = self.nonprime 

     nonprimes = open("nonprimes.txt", "w") 

     for nonprime in set(self.primelist) & set(self.nonprime): 
      nonprimes.write(str(nonprime) + ", ") 

     nonprimes.close() 

atexit.register(exiting) 


if __name__ == "__main__": 
    primes() 
+0

什麼叫半句是什麼意思? – kvivek 2013-02-28 12:18:59

+0

它將列表保存到.txt文件的部分,對不起,沒有指定 – ReallyGoodPie 2013-02-28 12:25:35

+0

您正在尋找的內容稱爲多線程。請參閱http://docs.python.org/2/library/multiprocessing.html – 2013-02-28 12:27:40

回答

0

雖然我敢肯定的文件對象不清理和沖洗的東西,當它被回收到文件。最好的方法是使用with語句。

with open("nonprimes.txt", "w") as nonprimes: 
    for nonprime in set(primelist) & set(nonprime): 
     nonprimes.write(str(nonprime) + ", ") 

當聲明結束時,關閉文件等的鍋爐代碼自動執行。

0

Python有一個atexit對模塊,允許你註冊代碼,當一個腳本退出你想執行:

import atexit, sys 

def doSomethingAtExit(): 
    print "Doing something on exit" 

atexit.register(doSomethingAtExit) 

if __name__ == "__main__": 
    sys.exit(1) 
    print "This won't get called" 
+0

hmm,我使用atexit模塊修改了我的代碼,出於某種原因,它似乎沒有工作。修改後的代碼位於問題 – ReallyGoodPie 2013-02-28 12:42:53

+0

您的退出方法存在縮進問題。另外,它應該是'if __name__',而不是'__name__'。最後,最好將你的'__init__'方法的內容移到它自己的方法中。 '__init__'實際上只是用於實例化一個類,而不是做實際的工作。 – 2013-02-28 13:15:31

+0

好的,我再次編輯了代碼。仍然沒有得到退出時保存的列表。 – ReallyGoodPie 2013-02-28 14:16:36