[Twisted-Python] Windows issues...
Benjamin Schollnick
junkster at rochester.rr.com
Mon Feb 18 21:15:41 EST 2002
on 2/18/02 7:24 PM, Andrew Bennetts at andrew-twisted at puzzling.org wrote:
>> 1) setup.py install died....It stopped when it couldn't find "CL.EXE",
>> while building
>> something in the twisted.spread.cbanana section...
>
> CL.EXE is a command line program that comes with MS Visual C++... setup.py
> is basically trying to compile a C extension module. I can send you a
> binary for that file if you don't have MS VC++ installed, otherwise run
> VCVARS32.BAT and try again.
No Visual C++....
If you don't mind sending it, I would appreciate it...
This really needs to be noted.... I admit, I didn't search around too
much, but I didn't see anything mentioning that it required a C/C++
compiler...
(How about a precompiled Windows binary? Or having Distutils install the
precompiled binary)....
>> 6) Under Windows, the default should be -n for twistd, and the PID file
>> shouldn't be created. At least, as it is now. twistd just "stops", after
>> it starts up and drops us back to the command line, and examination shows
>> that the program isn't running. So at least as a workaround, the -n mode
>> works....
>
> Yeah, -n uses os.fork, which is not available under Windows. You probably
> need to use NT services instead...
That's what I figured....
(By NT Services, you mean the services listed from control panels -->
services?)
But I dislike the NT services.... I've never seen a service get installed,
that will "uninstall" properly... (Usually add/remove program doesn't
uninstall the service)
I prefer to run the console......reminds me a little bit more of a syslog
window... >g<
> Alternatively, consider using the cygwin version of Python -- it is closer
> to the unix version, and so os.fork will work. Also, it comes with gcc, so
> cbanana would compile correctly. Unfortunately, I don't think it can
> interoperate with the Win32 extensions (at least, not that I know of).
I use the Win32 services, include ODBC... So that's not really a useable
workaround...
>> I guest a better question is, has twistedmatrix been tested under Windows?
>> It really seems to be unix centric in it's programming...
>
> It basically works. The other problem to watch out for is that
> Protocol.connectionFailed won't trigger unless you specify a timeout for
> your tcp.Client, because select works slightly differently on Windows.
> Incidentally, I'm not using the twistd stuff *at all* (I don't yet
> understand the need for it under Windows, but then I don't even know exactly
> what it's meant to do...). Instead, I'm using this little file:
Is the following code "temporary".... It's considered a service while
running, but doesn't get installed in the services control panel?
It looks interesting, but I don't want to register the app as a "true"
service... As I mentioned before, I can't find a reliable way to remove
a service, without registry hacking...
-- Benjamin
> --- ServerFramework/Service.py ---
> import win32serviceutil, win32service
>
> """Example use of this module:
>
> from ServerFramework.Service import Service, main
> import ExampleServer
>
> class ExampleServerService(Service):
> _svc_name_ = "ExampleServerService"
> _svc_display_name_ = "My Example Server Service"
> main = ExampleServer.main
>
> if __name__ == '__main__':
> main(ExampleServerService)
> """
>
>
> try:
> import twisted
> except ImportError:
> print "Twisted Python must be installed to run this service"
> raise
>
> class Service(win32serviceutil.ServiceFramework):
> """I am a template service for ServerFramework servers.
>
> You should subclass me and override the following attributes:
> _svc_name_ -- see win32serviceutil docs
> _svc_display_name_ -- see win32serviceutil docs
> main -- function that starts your server
>
> You can also override:
> logFile -- filename for where debug messages will be saved
> (default: c:/<_svc_name_>.log)
> """
> _svc_name_ = "UnnamedServer"
> _svc_display_name_ = "My UNNAMED Server"
> main = None
> logFile = None
>
> def __init__(self, *args):
> win32serviceutil.ServiceFramework.__init__(self, *args)
> if not self.logFile:
> self.logFile = 'c:/%s.log' % (self._svc_name_,)
>
> def SvcDoRun(self):
> from twisted.python.log import startLogging
> startLogging(open(self.logFile,'a'))
> # Call main, note that it is not a method of this class, so we use
> # self.main.im_func() instead of self.main().
> self.main.im_func()
>
> def SvcStop(self):
> self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
> from twisted.internet.main import shutDown
> shutDown()
>
> def main(svc):
> win32serviceutil.HandleCommandLine(svc)
>
> if __name__ == '__main__':
> print "This is a library module, and should not be executed."
More information about the Twisted-Python
mailing list