编程语言
首页 > 编程语言> > 让Python在我的脚本之前运行几行

让Python在我的脚本之前运行几行

作者:互联网

我需要运行脚本foo.py,但我还需要在foo.py中的代码之前插入一些调试行.目前我只是将这些行放在foo.py中,我小心不要将它提交给Git,但我不喜欢这个解决方案.

我想要的是一个单独的文件bar.py,我不承诺给Git.然后我想跑:

python /somewhere/bar.py /somewhere_else/foo.py

我想要做的是首先在bar.py中运行一些代码行,然后运行foo.py作为__main__.它应该在bar.py行运行的相同过程中,否则调试行将无济于事.

有没有办法让bar.py这样做?

有人建议:

import imp
import sys

# Debugging code here

fp, pathname, description = imp.find_module(sys.argv[1])
imp.load_module('__main__', fp, pathname, description)

问题是,因为它使用导入机制,我需要与foo.py在同一个文件夹上运行它.我不希望这样.我想简单地放入foo.py的完整路径.

另外:解决方案也需要使用.pyc文件.

解决方法:

Python有一种在启动时运行代码的机制; site模块.

"This module is automatically imported during initialization."

在导入__main__之前,站点模块将尝试导入名为sitecustomize的模块.
如果您的环境指示它,它还将尝试导入名为usercustomize的模块.

例如,您可以将sitecustomize.py文件放在包含以下内容的site-packages文件夹中:

import imp

import os

if 'MY_STARTUP_FILE' in os.environ:
    try:
        file_path = os.environ['MY_STARTUP_FILE']
        folder, file_name = os.path.split(file_path)
        module_name, _ = os.path.splitext(file_name)
        fp, pathname, description = imp.find_module(module_name, [folder])
    except Exception as e:
        # Broad exception handling since sitecustomize exceptions are ignored
        print "There was a problem finding startup file", file_path
        print repr(e)
        exit()

    try:
        imp.load_module(module_name, fp, pathname, description)
    except Exception as e:
        print "There was a problem loading startup file: ", file_path
        print repr(e)
        exit()
    finally:
        # "the caller is responsible for closing the file argument" from imp docs
        if fp:
            fp.close()

然后你可以像这样运行你的脚本:

MY_STARTUP_FILE=/somewhere/bar.py python /somewhere_else/foo.py

>您可以在foo.py之前运行任何脚本,而无需添加代码来重新导入__main__.
>运行导出MY_STARTUP_FILE = / somewhere / bar.py,不需要每次都引用它

标签:python,python-import
来源: https://codeday.me/bug/20191001/1837645.html