我正在描绘一组程序的架构,这些程序共享存储在数据库中的各种相互关联的对象.我希望其中一个程序充当服务,为这些对象的操作提供更高级别的接口,以及通过该服务访问对象的其他程序.
我目前的目标是将Python和Django框架作为实现该服务的技术.我很确定我想知道如何在Linux中守护Python程序.但是,它是系统应支持Windows的可选规范项.我对Windows编程没什么经验,也没有Windows服务的经验.
是否可以将Python程序作为Windows服务运行(即在没有用户登录的情况下自动运行)?我不一定要实现这一部分,但我需要大致了解如何做以决定是否按照这些方式进行设计.
编辑:感谢目前为止的所有答案,它们非常全面.我想知道一件事:Windows如何了解我的服务?我可以使用本机Windows实用程序进行管理吗? 在/etc/init.d中放置一个启动/停止脚本相当于什么?
我检查了激活脚本,它看起来我所做的一切是:
如何virtualenv通过这些提供神奇的虚拟环境?我错过了什么?
我正在尝试安装pywin32.我从sourceforge.net下载了它.我跑的时候
setup.py install
Run Code Online (Sandbox Code Playgroud)
它显示"无法找到vcvarsall.bat".我用Google搜索,发现我必须安装MinGW并设置路径然后运行
python setup.py build --compiler=mingw32
Run Code Online (Sandbox Code Playgroud)
但它正在显示
Can't find a version in Windows.h
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?(我安装了Visual Studio 2010 Ultimate的试用版,并安装了MinGW C和C++编译器.操作系统:Windows 7.)
任何人都可以告诉我从哪里下载已经在MinGW中编译的Python二进制文件的源代码,所以我不必这么做.或者,如果我可以获得已经拥有Windows模块的python.
我试图用C#编写Windows服务.我需要找到某个文件的路径,该文件存储在环境变量中.在常规的C#控制台应用程序中,我可以通过以下行实现:
string t = System.Environment.GetEnvironmentVariable("TIP_HOME");
Run Code Online (Sandbox Code Playgroud)
如果我把它写到控制台,我发现它是成功的.
现在,如果我在Windows服务中尝试相同的代码,则该字符串t为空.
知道为什么吗?
我正在使用Python 3.4,并创建了pyvenv,我希望在python进程中激活它.使用virtualenv,我曾经使用过activate_this.py,但这似乎在pyvenv中消失了.
现在有一种简单的方法可以有效地将当前的解释器更改为virtualenv解释器吗?我可能会搞乱PATH(这就是做了什么activate_this.py),但我想要一种更简单,更稳定的方式.
这适用于wsgi.py.
我一直在尝试将 Python 脚本(通过 Pyinstaller 的 .PY 和 .EXE)设置为 Windows 服务。我面临的挑战是遇到的大多数问题似乎与我自己的问题无关。
我成功设置了一次虚拟环境,并运行了一个示例服务。但是,在记录我的步骤并尝试重新创建虚拟环境并运行服务时,我遇到了问题。
> python -m venv venv
> venv\scripts\activate.bat
> pip install pypiwin32
Run Code Online (Sandbox Code Playgroud)
然后按照此StackOverflow Question中的说明进行操作。我按照lindsay.stevens.au的回答运行:
> python myvenv\Scripts\pywin32_postinstall.py -install
Run Code Online (Sandbox Code Playgroud)
然后复制venv\Lib\site-packages\win32\pythonservice.exe到venv\Scripts\pythonservice.exe
我一直在 GitHub 上使用 HaroldMils 的这个服务示例作为app.py。
当我运行这个时:
> python app.py install
Installing service PythonExample
Service installed
> python app.py debug
Debugging service PythonExample - press Ctrl+C to stop.
Error 0xC0000005 - Python could find the service class in the module
<Error …Run Code Online (Sandbox Code Playgroud) 要添加REG_MULTI_SZ多行注册表值,我可以这样做
reg.exe ADD "HKLM\path\to\registry\key" /v RegistryValue /t REG_MULTI_SZ /d "abc\0def\0"
Run Code Online (Sandbox Code Playgroud)
这将添加("abc","def").
但是如果我需要添加("abc","","def"),即两者之间的空项呢?
干
reg.exe ADD "HKLM\path\to\registry\key" /v RegistryValue /t REG_MULTI_SZ /d "abc\0\0def\0"
Run Code Online (Sandbox Code Playgroud)
给我一个"无效参数"错误.
python ×4
windows ×3
pywin32 ×2
c ×1
c# ×1
command-line ×1
mingw ×1
mod-wsgi ×1
permissions ×1
python-3.x ×1
registry ×1
service ×1
virtualenv ×1