【发布时间】:2013-08-01 19:25:53
【问题描述】:
短版
我想,在python中,subprocess.call(['php', '/path/somescript.php']),php脚本的第一行基本上是"echo 'Here!';"。但是subprocess.call 返回错误代码-11,并且 php 脚本无法执行其第一行并将任何内容回显到输出。这一切都发生在 Ubuntu Server 12.04.2 和 Ubuntu Desktop 12.04.2 上。
谁能指出-11 返回码的含义? (是来自python、系统还是php命令?
有几次,我看到它深入到 php 脚本中,然后通过打印“zend_mm_heap 已损坏”并返回 1 而失败。
更描述性的问题版本:
我有一个 python 脚本,在使用 subprocess.call(['phpunit', ...]) 运行一些 phpunit 测试后,我想运行另一个 php 脚本来收集运行测试时收集的代码覆盖率数据,方法是执行 subprocess.call(['php', '/path/coverage_collector.php'])。
几个月来,脚本运行良好,但今天,在添加了几个文件和测试后,它开始失败(不是 100% 的时间,大约 5-10% 的时间它工作)。
当它失败时,subprocess.call 返回-11,并且coverage_collector.php 的第一行没有设法将其消息回显到标准输出。有几次它深入到 php 脚本中,但失败并出现错误代码 1 并打印了 "zend_mm_heap corrupted"。
我有一个目录结构,其中每个文件夹可能包含子文件夹,每个文件夹执行其单元测试,然后收集该文件夹及其子文件夹的覆盖率数据。
该脚本适用于所有文件夹及其子文件夹(执行所有测试并收集所有覆盖范围),并且过去也适用于根级文件夹(目前适用于许多较小的项目具有完全相同的结构和脚本) - 直到今天,在一个足够无辜的代码签入后它开始失败之后,使用该脚本向其中一个 php 项目添加了一些文件和测试。
奇怪的是它在这个奇怪的地方失败了——在尝试调用 php 命令时,甚至没有执行 php 脚本的第一行,而这发生在同一个 php 脚本执行几秒钟后许多其他文件夹,工作正常。
我怀疑这可能是因为根级别脚本只是有更多数据要处理 - 将它自己的覆盖范围与所有子文件夹的覆盖范围相结合(这可能解释了 zend 堆损坏,当这种情况发生时) ,但这仍然不能解释为什么大多数时候调用会以-11 失败,并且甚至不会让 php 脚本开始收集覆盖率数据。
有什么想法吗?
【问题讨论】:
-
从命令行调用php脚本会失败?
-
您是否查看过 PHP 脚本的代码以查看它是否以 -11 的代码退出?
-
是的,它也从命令行失败 - 这是一个嫌疑犯,谢谢。
-
马克 - 没有调查所有库调用的来源,是的,他们可能会。但是,我试了一下并使用 ini_set('memory_limit', '2048M'); 请求更多内存。在脚本的开头,它似乎奏效了 - 到目前为止,我已经连续 3 次成功构建。我想这只是 PHP_CodeCoverage_Report_HTML 处理的覆盖率数据过多的问题。我想知道为什么脚本失败时我从来没有得到任何输出(在将事情交给 PHP_CodeCoverage_Report_HTML 之前它应该回显很多),但是,无论如何,我认为我现在已经控制了它。谢谢。
标签: php python call command-line-interface