我有一个小的Web服务器应用程序,我用Python编写,从数据库系统获取一些数据并将其作为XML返回给用户.这部分工作正常 - 我可以从命令行运行Python Web服务器应用程序,我可以让客户端连接到它并获取数据.目前,要运行Web服务器,我必须以管理员用户身份登录到我们的服务器,并且必须手动启动Web服务器.我希望Web服务器在系统启动时自动启动为服务并在后台运行.
使用ActiveState的站点和StackOverflow中的代码,我非常清楚如何创建服务,我想我已经排序了 - 我可以安装并启动我的Web服务器作为Windows服务.但是,我无法弄清楚如何再次停止服务.我的Web服务器是从BaseHTTPServer创建的:
server = BaseHTTPServer.HTTPServer(('', 8081), SIMSAPIServerHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
自然地,serve_forever()调用使Web服务器处于无限循环中并等待HTTP连接(或ctrl-break按键,对服务无用).我从上面的示例代码中得到了一个想法,即你的main()函数应该处于一个无限循环中,只有当它处于"停止"状态时才会突破它.我的主要调用serve_forever().我有一个SvcStop功能:
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
exit(0)
Run Code Online (Sandbox Code Playgroud)
当我从命令行执行"python myservice stop"时,我似乎被调用了(我可以在其中放置一个产生输出到文件的调试行)但实际上并没有退出整个服务 - 后续调用"python myservice start" "给我一个错误:
启动服务时出错:服务实例已在运行.
随后的停止呼叫给了我:
停止服务时出错:此时服务无法接受控制消息.(1061)
我想我需要替换serve_forever(serve_until_stop_received,或其他),或者我需要一些修改SvcStop的方法,以便它停止整个服务.
这是一个完整的列表(我已经修剪了包含/注释以节省空间):
class SIMSAPIServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
try:
reportTuple = self.path.partition("/")
if len(reportTuple) < 3:
return
if reportTuple[2] == "":
return
os.system("C:\\Programs\\SIMSAPI\\runCommandReporter.bat " + reportTuple[2])
f = open("C:\\Programs\\SIMSAPI\\out.xml", "rb")
self.send_response(200)
self.send_header('Content-type', "application/xml")
self.end_headers()
self.wfile.write(f.read())
f.close()
# The output from CommandReporter is simply dumped to out.xml, which we read, …Run Code Online (Sandbox Code Playgroud) 我做TDD,我在组织单元测试时相当松散.我倾向于从表示下一个故事或功能块的文件开始,并编写所有单元测试以使其工作.
当然,如果我正在引入一个新类,我通常会为该类创建一个单独的单元测试模块或文件,但我不会将测试本身组织到任何更高级别的结构中.结果是我快速编写代码并且我相信我的实际程序结构合理,但单元测试本身是"混乱的".特别是,它们的结构倾向于概括开发过程的系统发育.有时我认为自己在测试中懒惰的代码中交易懒惰.
这有多大的问题?谁在这里不断重构和重组他们的单元测试以试图改善他们的整体结构?有什么提示吗?测试的整体结构应该是什么样的.
(注意,我不是在问这个问题"每个函数有多少个断言"问题:我应该为每个函数/方法编写多少个单元测试?我在谈论更大的图片.)
我在VMWare分区中运行Windows.有时,TSVNCache.exe进程开始做一些奇怪的事情(好像它做了无限循环的I/O操作).突然间,我的整个VMWare会话开始变慢.我的mac严重升温.从某种意义上来说,它的表现非常火爆.
我的问题是这个TSVNCache进程到底是什么?,似乎我可以在没有它的情况下在SVN存储库上做几乎所有事情.
我发现关于TDD的事情是它需要时间来设置你的测试并且自然是懒惰的我总是想写尽可能少的代码.我似乎做的第一件事是测试我的构造函数已经设置了所有的属性,但这是否有点过分?
我的问题是你在单元测试中写出了什么级别的粒度?
..是否有一个测试太多的情况?
我有一个MS SQL数据库,并有一个varchar我想做查询的字段 where name like '%searchTerm%'.但即使使用SQL企业的全文索引,它现在太慢了.
有人可以解释一下如何Lucene .Net帮助我的情况?索引器如何工作?查询如何工作?
为我做了什么,我该怎么办?
我正在尝试以编程方式创建Excel 2007文档.现在,我找到了两种方法:
目前,我使用ExcelPackage,它有一些非常严重的缺点和问题.因为我不需要创建过于复杂的Excel工作表(最复杂的是我明确需要将单元格类型设置为数字或文本),我接下来会选择选项1,但我只是想知道是否存在生成Excel 2007表格的任何其他好的和支持的方法?奖励积分如果可以创建它们而不必将它们保存到硬盘驱动器,即生成并直接将它们输出到流中.
.net 3.0是这里的目标,没有3.5善良:(
编辑:谢谢到目前为止.XML SDK确实只有3.5,但俄罗斯Roulet ......呃... COM Interop也是我想要尽可能避免的东西,特别是因为Excel 2007有一些有点复杂但仍然很容易创建的文档格式.我将查看发布的各种链接和提示.
我注意到写入文件,关闭它并将其移动到目的地随机地在Vista上失败.具体来说,MoveFileEx()将返回ERROR_ACCESS_DENIED没有明显的原因.这至少发生在Vista SP1上(32位).在XP SP3上不会发生.
在互联网上找到关于完全相同问题的这个线程,没有真正的解决方案.到目前为止看起来错误是由Vista的搜索索引器引起的,见下文.
给出的代码示例足以重现问题.我也在这里粘贴它:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
bool test() {
unsigned char buf[] = {
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99
};
HANDLE h;
DWORD nbytes;
LPCTSTR fn_tmp = "aaa";
LPCTSTR fn = "bbb";
h = CreateFile(fn_tmp, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_ALWAYS, 0, 0);
if (h == INVALID_HANDLE_VALUE) return 0;
if (!WriteFile(h, buf, sizeof buf, &nbytes, 0)) …Run Code Online (Sandbox Code Playgroud) 您使用什么软件来管理Scrum软件开发?
到目前为止,我们已经尝试过Tackle和VersionOne(都是免费的)并且它们很好,除了很难跟踪正在进行的工作.例如,如果我有一项任务我估计需要8个小时才能完成,我已经完成了4个小时的工作,剩下4个小时,任务总是报告为剩余8个小时,直到它标记为完成,此时它降到零.
我想使用一种工具,让我能够在每周末的团队WIP中准确地完成工作,看看这项工作对截止日期和完成的任务产生了多大的影响.
感谢您的输入!
在C和C++中,您可以通过在数字的末尾加上'l'来告诉编译器数字是'long'.例如,长x = 0l;
如何告诉C#编译器一个数字是一个字节?
几年前我去学校接受编程,当我下班时,我找到了一份系统管理工作,这是我职业生涯的方向.我想重新开始某种类型的开发,并且一直在"玩"C#和ASP.NET,但我听到很多其他'新'语言的嗡嗡声(新的我认为他们是新的我喜欢Ruby和F#.我想我想知道我是否在浪费时间学习MS语言,而不是更多的通才.很长一段时间没有离开开发社区(如果有的话)让我陷入潮流,我不想被抛在后面.
有没有想过如果最好遵循"最新"语言或坚持使用更多尝试和真正的技术?