0

我正在开发一个 Python 脚本(在脚本之后),它在大型日志文件中搜索搜索字符串。在正常使用中,它是从 Hudson 前端调用的。

关于 Hudson 界面:
Hudson 作业在连接的虚拟机 (VM) 上创建一个临时批处理文件,该文件调用脚本并传递一些参数。我们已经有数百个使用此设置的成功实例,但现在出现了错误。

关于脚本:
日志文件包含在数十个压缩的.tgz文件中。我的脚本搜索每个.tgz文件中的每个日志。
我的脚本接受的命令行参数之一是名为PROCESS_IN_PARALLEL的True/False参数。如果PROCESS_IN_PARALLEL设置为True,则每个.tgz文件都在其自己的线程中搜索(使用多处理模块)。如果PROCESS_IN_PARALLEL设置为False,则按顺序搜索每个.tgz文件(使用循环)。

什么有效:

  1. 我在用于测试脚本的 VM 上有一个批处理文件。我可以成功地使用这个.bat来调用我的脚本,并将PROCESS_IN_PARALLEL设置为 (1a) True或 (1b) False。当然,它在True时运行得更快(大约快 4 倍)。
    我已经四重检查了这个.bat是否以相同的顺序将相同的参数传递给我的脚本作为 Hudson。我还在脚本中添加了一行,将输入参数记录到文件中,并且发现 Hudson 确实以正确的顺序传递了正确的参数。
  2. 我可以成功地使用 Hudson 调用我的脚本,并将PROCESS_IN_PARALLEL设置为False
  3. 我已经使用上述三个测试用例多次(甚至使用其他参数的多个配置)测试了我的脚本的当前迭代,都成功了。

什么不起作用:
如果我使用 Hudson 调用我的脚本并将PROCESS_IN_PARALLEL设置为True,那么我会收到一个奇怪的错误。这是回溯:

Traceback (most recent call last):
  File "F:\Scripts\Parse_LogFiles_Archive\parseLogs_Archive_8-19-13.py", line 40, in main  
    searchHits = searchTarList(searchDir, newDirectory, argv)
  File "F:\Scripts\Parse_LogFiles_Archive\parseLogs_Archive_8-19-13.py", line 163, in searchTarList  
    hits = processPool.map(searchTar, tarMap)
  File "E:\Python27\lib\multiprocessing\pool.py", line 225, in map  
    return self.map_async(func, iterable, chunksize).get()
  File "E:\Python27\lib\multiprocessing\pool.py", line 522, in get  
    raise self._value   IOError: [Errno 9] Bad file descriptor 

根据我的研究,当 Python 尝试读取以写入模式打开的文件时会发生此错误。

我的问题:
是否有一个天才既了解 Python 又了解 Hudson 以了解正在发生的事情?

4

0 回答 0