2013-02-28 120 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