在非交互模式下向Python可执行文件传递选项
我想在每次使用Python(2.6版)的时候都传递一些选项,而不仅仅是在交互模式下。有没有什么文件可以放这些命令呢?
补充说明:我特别想要关闭那些弃用警告。
4 个回答
你试过 ~/.pythonrc.py
吗?在Python的手册里有提到这个文件,描述是:
用户专用的初始化文件,由用户模块加载;默认情况下或大多数应用程序不会使用。
我不太明白“用户模块”是什么意思,但我觉得试试看是值得的。
补充一下:看起来你需要在你的Python脚本里 import user
,然后Python在启动时会自动执行这个 ~/.pythonrc.py
文件(不仅仅是在交互模式下)。这个方法在Python 3.0之前的版本应该是有效的。http://docs.python.org/library/user.html
大部分选项可以通过环境变量来设置——你可以输入 python -h
来查看具体的选项列表:
$ py26 -h|grep PYTH
-B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x
-d : debug output from parser; also PYTHONDEBUG=x
-E : ignore PYTHON* environment variables (such as PYTHONPATH)
if stdin does not appear to be a terminal; also PYTHONINSPECT=x
-O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x
-s : don't add user site directory to sys.path; also PYTHONNOUSERSITE
-u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x
-v : verbose (trace import statements); also PYTHONVERBOSE=x
PYTHONSTARTUP: file executed on interactive startup (no default)
PYTHONPATH : ':'-separated list of directories prefixed to the
PYTHONHOME : alternate <prefix> directory (or <prefix>:<exec_prefix>).
PYTHONCASEOK : ignore case in 'import' statements (Windows).
PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.
你是否在担心那些不能通过环境变量设置的其他标志?
顺便提一下,PYTHONINSPECT=x
相当于 -i
(grep
把这个信息去掉了,因为它出现在前面的一行;-)。
在Linux下,Python脚本开头的#!/usr/bin/python
这一行可以用来给解释器传递一些选项。
每当Python启动时,它会自动导入一些模块。在我的系统上,有一些模块可能需要修改,以便按照其他人建议的方式设置选项,具体位置如下:
/usr/lib/python2.6/site-packages/sitecustomize.py
如果你简单地把这段代码放到那个文件里:
import warnings
warnings.simplefilter("ignore", DeprecationWarning)
那么它会一直关闭所有的弃用警告,这可能不是你想要的。你可以改成检查你自己设置的PYTHONNODEPRECATIONWARNING
环境变量,这样你就能有更多的控制权。
在《Dive Into Python》中找到关于sitecustomize.py的参考,以及在Python 2.6文档中对sitecustomize模块的说明后,我认为那个文件是你想要的最佳选择。在Python 2.6中,由于它有用户特定的site-packages目录,你可以按用户来设置这个选项,不过你可能需要找到任何系统范围内的sitecustomize.py文件,然后把它复制到你的目录中,或者找到一种方法在你的文件中显式导入它。