python服务器搭建qt搭建客户端_利用PythonQT,定制服务器启动工具

在开发过程中经常需要修改游戏服务器的各种配置参数,以方便在冒烟环境,开发环境和预发布环境中进行调试。我们以前使用ini文件进行服务器配置,所以经常需要关掉服务器,修改ini文件,然后再重新把服务器拉起来。最近有点时间,就开始考虑做个服务器启动小工具,能方便服务器在不同环境下的部署。

开始想用QT来写这个小工具,但发现建立一个QT工程其实有点小麻烦,后来干脆使用PythonQT来做。一个100多行的小脚本就能满足需求,以后交给其他人扩展功能也很方便。

主要是想做两个功能

1:可以方便的对服务器在不同环境下进行部署

2:可以在服务器启动时设置系统时间,因为经常需要测试一些时间性的业务。比如元旦节的活动。以前都是通过改操作系统时间来测的,这样每台机器就只能启动一个服务器了,如果想测两个不同时间的业务,就要多找一台机器。

下面是代码,可以很简单的修改成自己需要的工具

#!/usr/bin/python

#-*- coding: utf-8 -*-

"""

ZetCode PyQt4 tutorial

In this example, we create a skeleton

of a calculator using a QtGui.QGridLayout.

author: Jan Bodnar

website: zetcode.com

last edited: October 2011

"""

import sys

import time

import threading

from PyQt4 import QtGui,QtCore

from xml.dom.minidom import parse,parseString

import os

version = u"服务器启动工具 V0.1"

class CommandThread(threading.Thread):

def setCommand(self,command):

self.command = command

def run(self):

os.system(self.command)

class Example(QtGui.QWidget):

def __init__(self):

super(Example, self).__init__()

self.initUI()

def initUI(self):

label1 = QtGui.QLabel(self)

label1.setText(u'选择服务器执行文件')

label1.move(20,20)

label2 = QtGui.QLabel(self)

label2.setText(u'选择服务器启动配置')

label2.move(20,80)

label3 = QtGui.QLabel(self)

label3.setText(u'选择服务器启动时间')

label3.move(20,150)

self.label4 = QtGui.QLabel(self)

self.label4.setText(u'差异时间')

self.label4.move(120,365)

self.text_serverbin = u"未选择文件"

self.label_serverfilename = QtGui.QLabel(self)

self.label_serverfilename.setText(self.text_serverbin)

self.label_serverfilename.move(20,50)

btn_selserverbin = QtGui.QPushButton('...',self)

btn_selserverbin.setGeometry(270,45,20,20)

btn_selserverbin.clicked[bool].connect(self.event_selserverbin)

self.dlg_selserverbin = QtGui.QFileDialog(self)

#配置选择

combo_serverConfig = QtGui.QComboBox(self)

xml_file = "./Data/Config/ServerConfig.xml"

doc = parse(xml_file)

serverConfig = doc.getElementsByTagName("serverConfig")

for config in serverConfig:

descript = config.getAttribute("description")

index = config.getAttribute("index")

combo_serverConfig.addItem(descript,index)

combo_serverConfig.move(20,100)

combo_serverConfig.activated[int].connect(self.event_selserverconfig)

self.serverconfigindex = 0

#日历

timer=QtCore.QTimer(self)

timer.start(60000)

self.connect(timer,QtCore.SIGNAL("timeout()"),self.event_update)

self.cal_serverdate = QtGui.QCalendarWidget(self)

self.cal_serverdate.setGridVisible(True)

self.cal_serverdate.move(20, 180)

self.cal_serverdate.clicked[QtCore.QDate].connect(self.event_selserverdate)

self.seldate = QtCore.QDate.currentDate();

self.time_servertime = QtGui.QTimeEdit(self)

self.time_servertime.move(20, 360)

self.time_servertime.setTime(QtCore.QTime.currentTime())

self.time_servertime.timeChanged.connect(self.event_selservertime)

self.seltime = QtCore.QTime.currentTime();

btn_start = QtGui.QPushButton(u'启动服务器',self);

btn_start.move(180,420)

btn_start.clicked.connect(self.start_server)

btn_close = QtGui.QPushButton(u'退出',self);

btn_close.move(260,420)

btn_close.clicked.connect(self.close)

self.setGeometry(300, 300,350,450)

self.setWindowTitle(version)

self.show()

def event_selserverbin(self, clicked):

self.text_serverbin = self.dlg_selserverbin.getOpenFileName(self,

"Open EXE", "", "EXE Files (*.exe)");

self.label_serverfilename.setText(self.text_serverbin)

self.label_serverfilename.adjustSize()

def event_selserverconfig(self,selindex):

self.serverconfigindex = selindex

def event_selserverdate(self,date):

self.seldate = date

self.update_deltaTime()

def event_selservertime(self,time):

self.seltime = time

self.update_deltaTime()

def event_update(self):

self.time_servertime.setTime(QtCore.QTime.currentTime())

def update_deltaTime(self):

currentDateTime = QtCore.QDateTime()

currentDateTime.setDate(QtCore.QDate.currentDate());

currentDateTime.setTime(QtCore.QTime.currentTime());

selDateTime = QtCore.QDateTime()

selDateTime.setDate(self.seldate)

selDateTime.setTime(self.seltime)

self.label4.setText(u'差异时间: ' +

str(currentDateTime.secsTo(selDateTime)) + u'秒')

self.label4.adjustSize()

def start_server(self):

serverfilename = self.label_serverfilename.text()

serverconfigindex = self.serverconfigindex

currentDateTime = QtCore.QDateTime()

currentDateTime.setDate(QtCore.QDate.currentDate());

currentDateTime.setTime(QtCore.QTime.currentTime());

selDateTime = QtCore.QDateTime()

selDateTime.setDate(self.seldate)

selDateTime.setTime(self.seltime)

command = str(serverfilename)

command += ' -c ' + str(serverconfigindex)

command += ' -t ' + str(currentDateTime.secsTo(selDateTime))

# print command

commandTD = CommandThread()

commandTD.setDaemon(True)

commandTD.setCommand(command)

commandTD.start()

def main():

app = QtGui.QApplication(sys.argv)

ex = Example()

sys.exit(app.exec_())

if __name__ == '__main__':

main()

上面的小工具在启动服务器时是阻塞式的,一旦服务器启动,小工具就会处于假死阶段,直到关闭服务器。

可以使用Thread库,建立一个线程来启动服务器即可。

最后使用py2exe ,把上述脚本编译成EXE后就可以在团队内部发布了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值