python当前目录是什么意思,如何在Python中正确地确定当前的脚本目录?

首先..如果我们正在讨论注入匿名代码的方法,这里有一对夫妇丢失了用例。

code.compile_command() code.interact() imp.load_compiled() imp.load_dynamic() imp.load_module() __builtin__.compile() loading C compiled shared objects? example: _socket?)

但是,真正的问题是,你的目标是什么 – 你是否试图强制某种安全? 或者你只是在什么被加载感兴趣。

如果您对安全性感兴趣,那么通过exec / execfile导入的文件名是无关紧要的 – 您应该使用rexec ,它提供了以下内容:

该模块包含RExec类,它支持r_eval(),r_execfile(),r_exec()和r_import()方法,它们是标准Python函数eval(),execfile()和exec和import语句的受限版本。 在这个受限制的环境中执行的代码只能访问被视为安全的模块和函数。 您可以根据需要inheritanceRExec的添加或删除function。

然而,如果这更多的是一个学术的追求..这里有一些愚蠢的方法,你可能会深入挖掘一点。

示例脚本:

./deep.py

print ' >> level 1' execfile('deeper.py') print ' << level 1'

./deeper.py

print '\t >> level 2' exec("import sys; sys.path.append('/tmp'); import deepest") print '\t << level 2'

/tmp/deepest.py

print '\t\t >> level 3' print '\t\t\t I can see the earths core.' print '\t\t << level 3'

./codespy.py

import sys, os def overseer(frame, event, arg): print "loaded(%s)" % os.path.abspath(frame.f_code.co_filename) sys.settrace(overseer) execfile("deep.py") sys.exit(0)

产量

loaded(/Users/synthesizerpatel/deep.py) >> level 1 loaded(/Users/synthesizerpatel/deeper.py) >> level 2 loaded(/Users/synthesizerpatel/) loaded(/tmp/deepest.py) >> level 3 I can see the earths core. << level 3 << level 2 << level 1

当然,这是一个资源密集的方式来做到这一点,你会跟踪所有的代码..不是很有效率。 但是,我认为这是一种新颖的方法,因为即使你深入巢穴,它也能继续工作。 你不能重写'eval'。 虽然你可以覆盖execfile()。

请注意,这种方法只包含exec / execfile,而不是“导入”。 对于更高级别的“模块”负载挂钩,您可以使用sys.path_hooks (PyMOTW提供)。

这就是我所有的头脑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值