我已经使用pywin32成功创建了一个Python Windows服务。在测试我的应用程序时,我试图让它打印(这没有按照我的预期工作),我也让它写入文件。它能够写入文件,但文件最终在python库site-packages文件夹中。这似乎是工作目录的位置,虽然我不确定为什么?我想知道指定工作目录应该是什么的最佳方法。
我可以打开带有完整路径名的文件,或者我可以使用os.cwd吗?什么是最佳做法?
以下是组成我的Windows服务的两个文件。
import os
import sys
import win32service
import win32serviceutil
from twisted.internet import reactor
import xpress
class XPressService(win32serviceutil.ServiceFramework):
_svc_name_ = 'XPress'
_svc_display_name_ = 'XPress Longer Name'
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
reactor.callFromThread(reactor.stop)
def SvcDoRun(self):
xpress.main()
reactor.run(installSignalHandlers=False)
if __name__ == "__main__":
win32serviceutil.HandleCommandLine(XPressService)
以下是由上述脚本导入的“xpress.py”。
import datetime
def main():
with open('times', 'a') as f:
print str(datetime.datetime.now())
f.write(str(datetime.datetime.now()))
if __name__ == '__main__':
main()
答案 0 :(得分:2)
他们都工作,这是你的需求。由于各种原因,最好使用文件名的绝对路径,这样您就不必担心应用程序在哪里工作,您只知道输出将在哪里(这是最重要的)。在* nix中,当应用程序没有指定的工作目录时,它们通常在'/'中工作。如果您选择在os.chdir(newDir)
的其他目录中工作,请在拨打win32serviceutil.HandleCommandLine
之前执行此操作
我不知道Windows的默认设置,但您可能已经将其与site-packages中的库目录一起钉了。