我遇到了一个非常具体的问题。我想在执行的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()
另一个显然是有效的,这对我来说毫无意义。
答案 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也应该有用;)