我正在编写一个用python和C编写的工具.python脚本读取配置文件,执行一些验证,对C程序进行多次调用.
system:RHE 5.7,python: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
Run Code Online (Sandbox Code Playgroud)
进入C:
printf( "\n--- swizzle\n\nargs:\n" );
for ( int i = 0; i < argc; i++ ) printf( "- %s\n", argv[ i ]);
Run Code Online (Sandbox Code Playgroud)
错误输出:
Command '[..]' returned non-zero exit status -11
Run Code Online (Sandbox Code Playgroud)
sth*_*sth 14
返回码-11表示"分段错误".负返回码通常意味着该过程由信号终止.返回码-11表示它是信号11,即SIGSEGV.