线程完成时Python运行代码

时间:2017-12-21 00:48:29

标签: python multithreading sockets

我目前正在使用Python和Socket库编写一个简单的文件服务器。我已经完成了大部分工作,现在我正在编写一种方法来将更新推送到服务器。这就是我期望它做的事情:

  1. 客户端应将新的Python文件发送到服务器
  2. 服务器删除文件以前的Python文件
  3. 服务器下载Python文件
  4. 服务器运行新代码
  5. 使用旧代码退出的服务器
  6. 截至目前,我的程序可以执行1-3,但仍然无法运行新代码并退出程序。由于服务器程序长约100行,here's a link to the pastebin with the code。如果您也想使用上传器here it is

    查看我的代码,问题出在我的更新代码中:

    class updServer(Thread):
        def __init__(self,s):
            Thread.__init__(self)
            self.s = s
        def run(self):
            os.remove(os.path.realpath(__file__))
            fn = self.s.recv(2048)
            with open(fn, 'wb') as f:
                still_data = True
                while still_data:
                    data = self.s.recv(2048)
                    if not data:
                        still_data = False
                    if data == '':
                        still_data = False
                    f.write(data)
                    f.flush()
                    os.fsync(f.fileno())
            f.close()
            global name_of_file
            name_of_file = fn
            return None
    

    或者我试图在其下运行新程序的方式:

    elif file_name_sent == b'to update server':
            new_t = updServer(conn)
            threads.append(new_t)
            new_t.start()
            global name_of_file
            execfile(name_of_file)
            os._exit(0)
    

    注意:我也尝试过使用os.command和subprocess.call,我也知道python在我的PATH上。如果您需要,请上传者的说明为here

0 个答案:

没有答案