作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 PyFTPdLib 在 Python 中为 FTP 服务器运行脚本,如下所示:
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
def main():
authorizer = DummyAuthorizer()
authorizer.add_user('user', '12345', '.', perm='elradfmwM')
handler = FTPHandler
handler.authorizer = authorizer
address = ('localhost', 2121)
server = FTPServer(address, handler)
# start ftp server
server.serve_forever()
if __name__ == '__main__':
main()
每当我调用这段代码时,它都会让命令行忙于运行“server.serve_forever()”,它不会继续运行 if 循环。
所以我的问题是,如何在服务器运行时添加用户而不关闭服务器?
我是否需要创建另一个脚本来调用这个脚本,然后再创建另一个脚本来添加用户?它是否需要线程化以便两者都可以在不锁定这个的情况下运行?
我已尝试浏览有关此模块的教程,但没有找到任何示例或看到任何解决方案。如果需要,我愿意切换到不同的模块来运行 FTP 服务器,只要我能控制一切。
我将从数据库中大量添加用户,然后将其删除。所以我不想在每次需要添加某人时关闭服务器并重新启动它。
最佳答案
如果有人对此主题感兴趣,我想我已经找到了解决方案。
我所做的是将上述代码保存在名为“create_ftp_server.py”的文件中,并将“main”从 def 更改为类。
#First .py module
class ftp_server:
def __init__(self):
self.authorizer = DummyAuthorizer()
self.authorizer.add_user('admin', 'password', '.', perm='elradfmwM')
def run(self):
self.handler = FTPHandler
self.handler.authorizer = self.authorizer
self.address = ('localhost', 21)
self.server = FTPServer(self.address, self.handler)
logging.basicConfig(filename='pyftpd.log', level=logging.INFO)
self.server.serve_forever()
def add_user(self,user,passwd,loc,privi):
self.authorizer.add_user(str(user), str(passwd), str(loc), perm=str(privi))
然后我制作了另一个模块来调用和运行这个文件(真的这只是出于我个人的喜好,因为你可以将它添加到同一个模块)
#Second .py module
import thread
import create_ftp_server
this_ftp = create_ftp_server.ftp_server()
thread.start_new_thread(this_ftp.run,())
thread.start_new_thread(this_ftp.add_user,('user','password',".",'elradfmwM'))
您现在要做的就是决定如何调用线程来添加用户。
注意:我尝试使用较新的 Threading 模块,但无法获得任何实际结果。不过,此选项对我来说效果很好。
关于python - PyFtpdLib 如何在仍在运行服务器时添加用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24436287/
我是一名优秀的程序员,十分优秀!