【发布时间】:2014-07-31 02:54:52
【问题描述】:
我正在编写一个用 python 和 C 编写的工具。python 脚本读取配置文件,执行一些验证,对 C 程序进行多次调用。
系统:RHE 5.7, 蟒蛇:2.7.6, gcc:4.5.2
被调用C程序的一些参数是输入文件的路径。在一种情况下,多个 C 程序调用的输入文件路径相同。在这种情况下,只有第一次调用成功,python 子进程模块的返回码是'-11'。
我不确定如何进行。首先,我找不到说明“-11”可能意味着退出状态的文档。它似乎不在 /usr/include/sysexits.h 中的“标准”代码中。我猜测代码也可以解释为 0xf5 或 245,因为我相信退出代码是真正有符号的 8 位值。
我已经在 C 程序的开头添加了调试以打印出调用它的参数,但是对于失败的调用没有任何显示。我可以理解 C 可能无法重新打开在上一次调用时读取的文件(也许),但代码甚至没有那么远!
那么,退出代码从何而来?它是否来自 python 子进程模块可能用来调用 C 程序的 (bash) 环境?它是否来自 C 程序的 C 运行时,甚至在它到达 main 之前?
我想我可以通过将“循环”向下移动到 C 中来推进这一点,这样它只会为每个输入文件路径调用一次,但这仍然不能解释这种行为。有人可以解释一下我如何确定这个错误的原因吗?谢谢。
(FWIW) 从 python 调用:
try:
subprocess.check_call( args )
except subprocess.CalledProcessError as e:
print e
进入C:
printf( "\n--- swizzle\n\nargs:\n" );
for ( int i = 0; i < argc; i++ ) printf( "- %s\n", argv[ i ]);
错误输出:
Command '[..]' returned non-zero exit status -11
【问题讨论】: