让Python在我的脚本之前运行几行 [英] Making Python run a few lines before my script

查看:13
本文介绍了让Python在我的脚本之前运行几行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我想要的是一个单独的文件bar.py,我不提交给Git。然后我想运行:

python /somewhere/bar.py /somewhere_else/foo.py
我希望这样做的是首先在bar.py中运行一些代码行,然后以__main__的身份运行foo.py。应该与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文件。

推荐答案

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

"This module is automatically imported during initialization."
在导入__main__之前,站点模块将尝试导入名为sitecustomize的模块。 如果您的环境要求,它还将尝试导入名为usercustomize的模块。

例如,您可以在包含以下内容的Site-Packages文件夹中放置一个Sitecustomize.py文件:

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__
  • 运行export MY_STARTUP_FILE=/somewhere/bar.py,无需每次引用

这篇关于让Python在我的脚本之前运行几行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆