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

3

我希望能够在每次使用Python(2.6版本)时传递一些选项,而不仅仅是在交互模式下。是否有一个文件可以存储这样的命令?

编辑:具体来说,我想要消除Deprecation警告。


Python 中的弃用警告功能不像它们应该的那样工作。最终用户永远不应该看到它们,只有开发人员:默认应该关闭,而不是打开,类似于 C 的废弃功能出现在编译或链接时间,而不是运行时。 - Glenn Maynard
我完全同意。显然,我们都希望库能够在Python 3.x中正常工作,但我不应该一直看到来自导入的库的警告! - chiggsy
4个回答

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中,有了用户特定的站点包目录,您可以按用户的方式设置它,但您可能需要找到任何系统范围内的sitecustomize.py文件,要么将其复制到您的文件中,要么找到一种明确导入它的方法。


太棒了,非常感谢。我想这就是我的做法,然后我会打开它以实现(我敢说)“use strict;”的效果。 - chiggsy
很高兴您喜欢这个答案。 :-) 我有点惊讶,尽管他的回答显然没有回答您的问题,但人们仍然想要给63.9k先生点赞。他一定有相当多的死忠粉丝。 :-) - Omnifarious
这个怎么在Python3中实现? - Jinx
@ZERO - 这是一个好问题。你尝试过这里的建议了吗? - Omnifarious
sitecustomize.py 没有被执行。 - Velkan
@Velkan - 回到我最初回答这个问题的时候,我记得测试过了。在Python3中有改变吗? - Omnifarious

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.

你是否关心无法通过环境变量设置的其他标志?
PS:PYTHONINSPECT=x相当于-i(因为它出现在上一行,所以grep切掉了这个信息;-)。

我实际上关心的是除那些变量之外的其他变量。我已经编辑了我的问题。 - chiggsy

1

很抱歉,我不完全明白你的问题是什么,但你可以尝试以下方法:

import warnings
warnings.simplefilter("ignore", DeprecationWarning)

所以,这可能并不真正回答问题。


1
谢谢。我之前不知道这个,现在这个帮助我更好地回答了OP的问题。 - Omnifarious

1

你有尝试过~/.pythonrc.py吗?在Python手册中有以下描述:

用户特定的初始化文件, 被用户模块加载;默认情况下大多数应用程序不使用它。

我不太确定它所谓的“用户”模块是什么意思,但我认为尝试一下是值得的。

编辑:看起来你需要在你的Python脚本中import user,然后Python会在启动时自动执行这个 ~/.pythonrc.py 文件(不仅仅在交互模式下)。这适用于Python版本小于3.0。 http://docs.python.org/library/user.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接