【问题标题】:How to interact with 'Windows service' synchronously in python如何在python中同步与“Windows服务”交互
【发布时间】:2017-01-18 13:38:24
【问题描述】:

使用 pywin32 模块怎么样? 或者有什么方法可以通过子流程模块来实现?

【问题讨论】:

  • 您的问题目前非常笼统。您能否举例说明您尝试与之交互的过程以及到目前为止您尝试过的代码?

标签: python python-3.x subprocess pywin32


【解决方案1】:

我无法想象这是怎么可能的。

Windows 服务不公开通用消息传递 API;每个服务(如果它选择)通过自己选择的 IPC 通道(例如 WCF)公开自己的特定 API。

无论如何,没有什么可以让您同步执行此操作;任何类型的 IPC 都将是对服务端点的异步调用。

您的问题需要更具体一些。

与 Windows 服务交互的可用通用 API 基本上仅限于:停止、启动、安装、卸载。看看这里:https://msdn.microsoft.com/en-us/library/windows/desktop/ms685942(v=vs.85).aspx

(如果您正在编写一个 new windows 服务,在 python 中,ZeroMQ 将是从命令行 python 脚本与其交互的非常合理的选择;有任意数量的替代 IPC 通道用于python 一样好)

--

要启动服务,请尝试:

import win32service
import win32serviceutil
import time

win32serviceutil.StartService(serviceName)
status = win32serviceutil.QueryServiceStatus(serviceName)
while status == win32service.SERVICE_START_PENDING:
  time.sleep(1)
  status = win32serviceutil.QueryServiceStatus(serviceName)

铌。除非您以管理员身份生成 python 实例,否则您将收到拒绝访问错误。

【讨论】:

  • 感谢您的回复,我的要求是...我想启动一个 3rd 方 Windows 服务 [如 tomcat] 并等到该服务启动。
  • 你仍然不能同步,但这里有一个你所追求的例子:code.activestate.com/recipes/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多