이 코드가 어떻게 작동하는지 또는 실제로 이상한 일이 발생하지 않는 것 같습니다. 나는 handle.start_new_thread에 매개 변수로 전달되는 "handle"이라는 메서드를 포함 시켰습니다. 그러나이 메서드는 인식되고 실행되지 않는 것으로 보입니다. PythonWin 에디터에서도 "self"를 입력 할 수 있습니다. 일반적으로 인식 된 옵션 목록이 미리 채워지고 핸들이이 버전에 표시되지 않지만이 파일의 작업 버전에서는 편집기에 표시됩니다.PYTHON : 동일한 클래스에서 메서드를 호출하기 위해 필요한 것은 무엇입니까?
이가 (수입의 많은 여기)
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "flaspsrv"
_svc_display_name_ = "Flash Policy Server"
_svc_description_ = "Initialize Flash Policy Server"
def __init__(self,args):
logging.basicConfig(filename='C:\\Uploads\\testing.log', level=logging.DEBUG, filemode='a', format='%(asctime)s %(levelname)s %(message)s')
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
socket.setdefaulttimeout(60)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.main()
def main(self):
try:
self.sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
except AttributeError:
# AttributeError catches Python built without IPv6
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
# socket.error catches OS with IPv6 disabled
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
logging.info('Listening on port 843')
self.sock.bind(('localhost', 843))
self.sock.listen(5)
try:
while True:
thread.start_new_thread(self.handle, self.sock.accept())
except socket.error, e:
logging.info('Error accepting connection: %s' % (e[1],))
def handle(self, conn, addr):
logging.info('Temp2')
addrstr = '%s:%s' % (addr[0],addr[1])
try:
logging.info('Connection from %s' % (addrstr,))
with contextlib.closing(conn):
# It's possible that we won't get the entire request in
# a single recv, but very unlikely.
request = conn.recv(1024).strip()
if request != '<policy-file-request/>\0':
logging.info('Unrecognized request from %s: %s' % (addrstr, request))
return
logging.info('Valid request received from %s' % (addrstr,))
fo = file('flashpolicy.xml', 'rb')
conn.sendall(fo.read(10001))
logging.info('Sent policy file to %s' % (addrstr,))
except socket.error, e:
logging.info('Error handling connection from %s: %s' % (addrstr, e[1]))
except Exception, e:
logging.info('Error handling connection from %s: %s' % (addrstr, e[1]))
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)
여전히 오류가있는 가장 작은 프로그램으로 프로그램을 줄인 다음 전체 프로그램을 질문에 붙여 넣으십시오. 자세한 정보는 http://SSCCE.ORG를 참조하십시오. –
"*이 방법은 인식/실행되지 않는 것 같습니다."- 추적을 포함한 정확한 오류 메시지는 무엇입니까? –
오류 메시지가 나타나지 않습니다. 이 스크립트는 서비스를 설치하는 데 사용되며, 실행시 서비스는 "main"을 실행해야합니다. 서비스가 올바르게 설치되고 로그 파일뿐만 아니라 포트 843의 LISTENS에 씁니다. 연결을 시도 할 때까지는 서비스가 자체적으로 STOPPED로 이동합니다. 파이썬으로 매우 익숙하지 않고 이것을 처음부터 빌드하기 시작할 곳이 어디인지 확신 할 수 없기 때문에이를 오류 로그로 바꾸는 방법이 확실하지 않습니다. handle 메소드의 첫 번째 행 주석은 절대로 로그 파일에 인쇄하지 않습니다. – cuckoo