在非交互模式下向Python可执行文件传递选项

3 投票
4 回答
3635 浏览
提问于 2025-04-15 18:06

我想在每次使用Python(2.6版)的时候都传递一些选项,而不仅仅是在交互模式下。有没有什么文件可以放这些命令呢?

补充说明:我特别想要关闭那些弃用警告。

4 个回答

1

你试过 ~/.pythonrc.py 吗?在Python的手册里有提到这个文件,描述是:

用户专用的初始化文件,由用户模块加载;默认情况下或大多数应用程序不会使用。

我不太明白“用户模块”是什么意思,但我觉得试试看是值得的。

补充一下:看起来你需要在你的Python脚本里 import user,然后Python在启动时会自动执行这个 ~/.pythonrc.py 文件(不仅仅是在交互模式下)。这个方法在Python 3.0之前的版本应该是有效的。http://docs.python.org/library/user.html

3

大部分选项可以通过环境变量来设置——你可以输入 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 相当于 -igrep 把这个信息去掉了,因为它出现在前面的一行;-)。

6

在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文件,然后把它复制到你的目录中,或者找到一种方法在你的文件中显式导入它。

撰写回答