从字符串执行python代码(WITH MODULES)

时间:2014-11-22 17:24:03

标签: python

我遇到了一个非常具体的问题。我想在执行的python脚本(来自python字符串)中调用Python函数,该脚本在开头包含导入。

听起来很复杂,但事实并非如此。我想做的是:

x = """import os
def test():
   print(os.curdir)
"""
exec(x)
test()

这适用于终端(ipython和CPython),但它在实际的python脚本中不起作用。它不会工作,因为它说 os没有导入,所以我想这是因为os被导入到一个被丢弃的范围,当我从脚本调用它时它没有导入os。

我还有其他方法可以解决这个烦人的问题,但它们都包括将文件写入硬盘(这在我的脚本中是不可接受的)。

更新

很抱歉,显然只有在从函数

调用exec和test时才会出现此问题

示例:

x = """import os
def test():
       print(os.curdir)
       """

def mytest():
    exec(x)
    test()
mytest()

另一个显然是有效的,这对我来说毫无意义。

2 个答案:

答案 0 :(得分:0)

我认为您的代码没有任何问题。我在Linux和Mac OS X上都尝试过Python 2.7.6和Python 3.2.3。

此外,以下效果很好:

#!/usr/bin/python

x = """import os
def test():
   print(os.curdir)
"""
exec(x)
test()
print (os.curdir)

答案 1 :(得分:0)

您使用的是什么Python版本? 我不知道我不应该工作。 Exec在相同的全局范围内执行它。 因此,如果测试有效,那么os也应该有用;)