python - 运行带有参数的 Python 脚本作为 Windows 服务
问题描述
我用 python 创建了一个 Windows 服务。当我以调试模式运行它时它运行良好,但是当我启动服务时它不起作用。这是我的脚本示例:
def run(param):
subprocess.Popen(["C:\\SER\\txt_write.pyw",param], shell=True)
#txt_write is a simple script: put the parameter into b.txt
def add_param():
x="123456"
run(x)
class PythonCornerExample(SMWinservice):
_svc_name_ = "name"
_svc_display_name_ = "name disp"
_svc_description_ = "desc"
def start(self):
self.isrunning = True
def stop(self):
self.isrunning = False
def main(self):
i=0
while self.isrunning:
add_param()
f= open("C:\\SER\\a.txt","a+")
f.write("xyz")
f.close()
time.sleep(25)
if __name__ == '__main__':
PythonCornerExample.parse_command_line()
因此,当我在调试模式下运行此脚本时,它会将“xyz”文本放入 a.txt,并调用另一个 python 脚本,将参数 (123456) 放入 b.txt。这就是我希望它的工作方式。
我的问题是,作为 Windows 服务安装的 a.txt 可以工作,但 b.txt 不能。
我的脚本有什么问题?为什么在调试模式下它可以,为什么它作为服务出错?
解决方案
用下面的代码改变最后两行:
import servicemanager, sys
if __name__ == '__main__':
if len(sys.argv) == 1:
servicemanager.Initialize()
servicemanager.PrepareToHostSingle(PythonCornerExample)
servicemanager.StartServiceCtrlDispatcher()
else:
PythonCornerExample.parse_command_line()
推荐阅读
- anychart - anychart - 使用饼图创建地图图表
- html - 即使页面半空,如何将页脚设置为底部?
- fish - 打开 vim 模式,为什么 gU 将当前单词变为大写而不是等待移动?
- python - 如何修复 python rest api 上的错误 403?
- csl - 如何更改 CSL 中的折叠引用范围分隔符?
- javascript - 使用 Cypress 测试 wordpress 网站
- firebase - 为 Firebase 应用程序授权应用引擎版本
- javascript - 使用jquery每个函数循环项目并将项目包装到div容器中
- flutter - 有没有办法从飞镖/颤振中的音频中分割左右声道?
- c# - 自定义 IdentityDb 上下文以使用 ApplicationRole