小编Pat*_*atB的帖子

无法找出-11的返回码是什么意思

我正在编写一个用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)

c python linux

8
推荐指数
1
解决办法
4464
查看次数

如何分配内存对齐的C++对象数组?

我发现operator new []存在问题:

#include <stdlib.h>
#include <stdio.h>

class V4 { public:
    float v[ 4 ];
    V4() {}
    void *operator new( size_t sz ) { return aligned_alloc( 16, sz ); } 
    void *operator new[]( size_t sz ) { printf( "sz: %zu\n", sz ); return aligned_alloc( 16, sz ); }
    void operator delete( void *p, size_t sz ) { free( p ); }
  //void operator delete[]( void *p, size_t sz ) { free( p ); }
};

class W4 { public:
    float …
Run Code Online (Sandbox Code Playgroud)

c++

7
推荐指数
1
解决办法
483
查看次数

来自shell变量的shebang脚本解释器

我有许多脚本需要指定运行它们的python二进制文件:

#! /home/nargle/python/bin/python2.6
Run Code Online (Sandbox Code Playgroud)

我需要调整这些脚本以在两个不同的站点上工作.许多工具安装在不同的地方,因此在新的站点2,脚本需要从以下开始:

#! /user/nargle/python/bin/python2.6
..
Run Code Online (Sandbox Code Playgroud)

我想用直接引用的路径替换为每个站点设置不同的环境变量.我想要的是这个工作:

#! $MY_PYTHON_PATH
Run Code Online (Sandbox Code Playgroud)

但事实并非如此!我对哪里研究这个有点朦胧.它是检测'#!'的执行shell(无论是bash,csh还是其他)在脚本的开头(无论是bash,python还是其他)并启动解释器/ shell来运行它?

我觉得必须有某种方法来做到这一点.请指教!

哦,是的,还有一个约束:我们不能使用这个路径.这似乎是一个愚蠢的限制,但这适用于拥有许多用户的大型环境

环境是RHEL 5.7.

编辑有人建议使用shell脚本,这是当前的计划:它工作正常:

 $MY_PYTHON_PATH some_script file.py $@
Run Code Online (Sandbox Code Playgroud)

问题是我们有很多人使用python文件,以及需要更改的大量自动化测试.如果必须这样做,必须要做,但如果可能,我想尽量减少改变工作实践对数十人的影响.

编辑还可以在两个系统上具有相同位置的链接,并且链接到每个系统上不同目标中的实际二进制文件.这是非常可行但似乎有点混乱:我们使用linux'modules'包为许多工具设置环境变量,如果我们可以从我们的模块文件中获取python路径会很好.

编辑这不是答案,但这感觉就像我正在寻找的邪恶黑客:http: //docs.nscl.msu.edu/daq/bluebook/html/x3237.html ..见"例4-2 .#!行为bash和tclsh"

编辑我希望这可行,但它没有:

!# /usr/bin/env PATH=$PATH:$MY_PYTHON_PATH python2.6
Run Code Online (Sandbox Code Playgroud)

bash shell

4
推荐指数
2
解决办法
2754
查看次数

标签 统计

bash ×1

c ×1

c++ ×1

linux ×1

python ×1

shell ×1