运行 Python 参数为 Windows 服务的脚本
Run Python script with parameter as Windows Service
我用 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()
服务启动传递的参数在你class的构造方法的args参数中。
class AppServerSvc (win32serviceutil.ServiceFramework):
def __init__(self, **args**):
你希望它们在 sys.argv 中,如果参数来自命令行,你会在那里得到它们。
所以我就这样做了。
sys.argv = args
现在我正在解析我的服务参数,就像它来自命令行一样。
:)
我用 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()
服务启动传递的参数在你class的构造方法的args参数中。
class AppServerSvc (win32serviceutil.ServiceFramework):
def __init__(self, **args**):
你希望它们在 sys.argv 中,如果参数来自命令行,你会在那里得到它们。
所以我就这样做了。
sys.argv = args
现在我正在解析我的服务参数,就像它来自命令行一样。
:)