Python调试执行模式

时间:2014-10-10 18:23:23

标签: android python

我使用Android NDK 9d为Android(4.4.4)交叉编译了python 2.7.2。

将已编译的项目加载到目标后,我遇到了可执行文件工作的问题,但除了打印版本或帮助菜单外,所有操作都返回错误代码1。

我将整个内容复制到了

/system/usr/bin/python2.7
/system/usr/lib/libpython2.7.so
/system/usr/lib/python2.7/*

PYTHONHOME=/system/usr/
PATH=/system/usr/bin:/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
PYTHONPATH=/system/usr/lib/python2.7/lib-dynload:/system/usr/lib/python2.7
LD_LIBRARY_PATH=/vendor/lib:/system/lib:/system/usr/lib:/system/usr/lib:/system/usr/lib/python2.7:/system/usr/lib/python2.7/lib-dynload

有没有办法让python更详细地说明为什么它返回错误代码并拒绝工作(比如进入交互模式)所以我可以知道它是否是某种配置问题或者我是否必须编辑自己编码以弄清楚发生了什么?

shell@devicex:/ # python2.7 --version
Python 2.7.2
shell@devicex:/ # python2.7 --help
usage: python2.7 [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-B     : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x
-c cmd : program passed in as string (terminates option list)
-d     : debug output from parser; also PYTHONDEBUG=x
-E     : ignore PYTHON* environment variables (such as PYTHONPATH)
-h     : print this help message and exit (also --help)
-i     : inspect interactively after running script; forces a prompt even
         if stdin does not appear to be a terminal; also PYTHONINSPECT=x
-m mod : run library module as a script (terminates option list)
-O     : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x
-OO    : remove doc-strings in addition to the -O optimizations
-Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew
-s     : don't add user site directory to sys.path; also PYTHONNOUSERSITE
-S     : don't imply 'import site' on initialization
-t     : issue warnings about inconsistent tab usage (-tt: issue errors)
-u     : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x
         see man page for details on internal buffering relating to '-u'
-v     : verbose (trace import statements); also PYTHONVERBOSE=x
         can be supplied multiple times to increase verbosity
-V     : print the Python version number and exit (also --version)
-W arg : warning control; arg is action:message:category:module:lineno
         also PYTHONWARNINGS=arg
-x     : skip first line of source, allowing use of non-Unix forms of #!cmd
-3     : warn about Python 3.x incompatibilities that 2to3 cannot trivially fix
file   : program read from script file
-      : program read from stdin (default; interactive mode if a tty)
arg ...: arguments passed to program in sys.argv[1:]

Other environment variables:
PYTHONSTARTUP: file executed on interactive startup (no default)
PYTHONPATH   : ':'-separated list of directories prefixed to the
               default module search path.  The result is sys.path.
PYTHONHOME   : alternate <prefix> directory (or <prefix>:<exec_prefix>).
               The default module search path uses <prefix>/pythonX.X.
PYTHONCASEOK : ignore case in 'import' statements (Windows).
PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.
shell@devicex:/ #
shell@devicex:/ # python2.7; echo $?
1
shell@devicex:/ #

由于

1 个答案:

答案 0 :(得分:0)

在对代码进行黑客攻击之后,我意识到python需要在设备上存在/system/usr/include/python2.7文件夹内容。复制完毕后,它现在可以正常运行。

至于没有看到任何调试输出的原始问题,在查看代码之后,我还发现stdout和stderr被重定向到sdcard日志文件,这就是为什么我没有看到错误的输出。修好之后,输出前端的一切都很好。