Python Windows服务问题

jianmuyan 2017-11-29 12:41:54
用pywin32包写了一个Windows服务。Test运行正常。代码如下
#!/usr/bin/python
#-*- coding: utf-8 -*-
import win32serviceutil
import win32service
import win32event
import os
import logging
import inspect


class PythonService(win32serviceutil.ServiceFramework):

_svc_name_ = "PythonService"
_svc_display_name_ = "Python Service Test"
_svc_description_ = "This is a python service test code "

def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
self.logger = self._getLogger()
self.run = True

def _getLogger(self):

logger = logging.getLogger('[PythonService]')

this_file = inspect.getfile(inspect.currentframe())
dirpath = os.path.abspath(os.path.dirname(this_file))
handler = logging.FileHandler(os.path.join(dirpath, "service.log"))

formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
handler.setFormatter(formatter)

logger.addHandler(handler)
logger.setLevel(logging.INFO)
return logger

def SvcDoRun(self):
import time
self.logger.info("service is run....")
while self.run:
self.logger.info("I am runing....")
time.sleep(10)

def SvcStop(self):
self.logger.info("service is stop....")
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
self.run = False

def main(self):
pass

if __name__=='__main__':
win32serviceutil.HandleCommandLine(PythonService)


如果引入自己写的模块后。服务就无法启动了。在头import处跟随这引入自己的模块
import win32serviceutil
import win32service
import win32event
import os
import logging
import inspect
import XXX
这个XXX只要是自己写的模块,服务就无法启动。模块中内容如下
#!usrbinenv Python
# coding=utf-8

__metaclass__ = type

import ConfigParser

class Config(object):
def __init__(self,name):
global cf
cf = ConfigParser.ConfigParser()
cf.read(name)

global defaultFTPServerPath
defaultFTPServerPath = cf.get("base", "DefaultFTPServerPath")
global defaultLocalPath
defaultLocalPath = cf.get("base", "DefaultLocalPath")
global timeInitInterval
timeInitInterval = cf.get("base", "TimeInitInterval")

global filePath
filePath = cf.get("files", "PathName")

def getDefaultFTPServerPath(self):
return defaultFTPServerPath

def getDefaultLocalPath(self):
return defaultLocalPath

def getTimeInitInterval(self):
return timeInitInterval

def getFilePath(self):
return filePath

def getFiles(self):
file = open(filePath)
allfiles = []
for line in file:
line=line.strip('\n')
allfiles.append(line)
return allfiles



if __name__ == '__main__':
ini = Config("D:\python__code\pytest\download.ini")
files = ini.getFiles()
print files
list = []
for file in files:
filepath = ini.getDefaultFTPServerPath() + "\\" +file

list.append(filepath)

print(list)

...全文
222 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
veronica001 2019-09-17
  • 打赏
  • 举报
回复
这个问题怎么解决的呀,我的sys.path看着也是对的
碧水幽幽泉 2017-11-30
  • 打赏
  • 举报
回复
引用 9 楼 jianmuyan的回复:
楼上几位没人回复了吗。。哎
多加些print语句,打印输出信息,看下程序运行到哪个地方开始报错。这样才好定位问题。
jianmuyan 2017-11-30
  • 打赏
  • 举报
回复
楼上几位没人回复了吗。。哎
jianmuyan 2017-11-29
  • 打赏
  • 举报
回复
引用 7 楼 oyljerry 的回复:
加点日志,起码看看你的代码都跑到什么地方了
谢谢版主回复。初学者。见谅。日志还不太会加。我尝试一下。import 自写模块引入就导致错误。还没添加任何代码
oyljerry 2017-11-29
  • 打赏
  • 举报
回复
加点日志,起码看看你的代码都跑到什么地方了
jianmuyan 2017-11-29
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
看下sys.path 自己写的模块不是随便放在哪就可以用的,要放在上面指定的目录里 或者你修改sys.path加多一个指向你的模块所在目录
明白的。已放到可用的目录里了。我自己写个不是服务的模块调用是完好的。就是放到这个服务下面调用。就 服务无法启动了
jianmuyan 2017-11-29
  • 打赏
  • 举报
回复
引用 3 楼 qq646748739 的回复:
没看到被引用的代码~
下面附上的代码就是写的一个模块。我贴了他的代码上来。只要引入这个。就无法启动了。自己写个不是服务的Test运行是完好的。
jianmuyan 2017-11-29
  • 打赏
  • 举报
回复
引用 2 楼 qq646748739 的回复:
你自定义的模块在哪用到?
下面附上的代码就是写的一个模块。我贴了他的代码上来。只要引入这个。就无法启动了。自己写个不是服务的Test运行是完好的。
碧水幽幽泉 2017-11-29
  • 打赏
  • 举报
回复
没看到被引用的代码~
碧水幽幽泉 2017-11-29
  • 打赏
  • 举报
回复
你自定义的模块在哪用到?
ckc 2017-11-29
  • 打赏
  • 举报
回复
看下sys.path 自己写的模块不是随便放在哪就可以用的,要放在上面指定的目录里 或者你修改sys.path加多一个指向你的模块所在目录

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧