Python Windows服务的工作目录是什么?

时间:2011-04-12 20:22:37

标签: python windows-services twisted pywin32

我已经使用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()

1 个答案:

答案 0 :(得分:2)

他们都工作,这是你的需求。由于各种原因,最好使用文件名的绝对路径,这样您就不必担心应用程序在哪里工作,您只知道输出将在哪里(这是最重要的)。在* nix中,当应用程序没有指定的工作目录时,它们通常在'/'中工作。如果您选择在os.chdir(newDir)的其他目录中工作,请在拨打win32serviceutil.HandleCommandLine之前执行此操作

我不知道Windows的默认设置,但您可能已经将其与site-packages中的库目录一起钉了。