2014-10-10 68 views
0

我使用Android NDK 9d爲Android(4.4.4)交叉編譯python 2.7.2。Python調試執行模式

將編譯後的項加載到目標後,我遇到了可執行文件可以工作的問題,但是除了打印版本或幫助菜單外,其他所有操作都返回錯誤代碼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更詳細的瞭解爲什麼它返回一個錯誤代碼,並拒絕工作(如進入交互模式),這樣我就可以知道如果這是某種配置問題,或者我必須自己編輯代碼來弄清楚發生了什麼?

[email protected]:/ # python2.7 --version 
Python 2.7.2 
[email protected]:/ # 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. 
[email protected]:/ # 
[email protected]:/ # python2.7; echo $? 
1 
[email protected]:/ # 

由於

+0

你是否將'PYTHONHOME'和其他env變量複製到了? – Falmarri 2014-10-10 21:48:57

+0

它們在啓動python之前在shell中導出 – David 2014-10-14 09:56:15

回答

0

在代碼黑客一點後,我意識到,蟒要求/system/usr/include/python2.7文件夾內容是存在於裝置上。複製完成後,它現在可以正常工作。

至於沒有看到任何調試輸出的原始問題,在仔細研究代碼後,我還發現stdout和stderr被重定向到sdcard日誌文件,這就是爲什麼我沒有看到錯誤的輸出。解決這個問題後,輸出前端的一切都很好。