Каков рабочий каталог для служб Python для Windows? - PullRequest
2 голосов
/ 13 апреля 2011

Я успешно создал службу Python для Windows, используя pywin32.При тестировании моего приложения я попытался напечатать его (что не сработало, как я ожидал), а также записал его в файл.Он смог записать в файл, но файл оказался в папке site-packages библиотеки Python.Похоже, что это где рабочий каталог, хотя я не уверен, почему?Я хотел бы знать, как лучше указать, каким должен быть рабочий каталог.

Я мог бы открывать файлы с полными путями, или я мог бы использовать 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 Ответ

2 голосов
/ 13 апреля 2011

Они оба работают, это то, что вам нужно. По разным причинам, вероятно, лучше использовать абсолютные пути к именам файлов, так что вам не нужно беспокоиться о том, «где» работает ваше приложение, вы просто знаете, где будет вывод (что наиболее важно). В * nix приложения обычно работают в «/», если у них нет указанного рабочего каталога. Если вы решили работать в другом каталоге, это os.chdir(newDir), сделайте это, прежде чем позвонить win32serviceutil.HandleCommandLine

Я не знаю Windows по умолчанию, но вы, вероятно, прибили его с помощью каталога библиотеки в пакетах сайта.

...