繁体   English   中英

Python如何从txt文件中执行代码

[英]Python how to execute code from a txt file

我想将一段代码保存在一个 txt 文件中并从我的 Python 脚本中执行它。

例如在txt文件中有

print("ok")

我希望我的程序可以打印,而不是打印print("ok ") ok 我怎样才能做到这一点?

做你想做的事通常会带来安全风险,但不一定如此。

您肯定必须通知用户潜在的风险。

有不止一种程序使用execfile()或compile()和exec语句来提供插件系统。

没有什么比这更丑陋的了,你只需要知道你在做什么,何时何地。

execfile()、eval() 和 exec 语句都允许您指定执行/评估代码的范围。

myscope = {}
execfile("myfile.txt", myscope)

这将防止新代码与旧代码混合。 myfile.txt 中的所有变量类、函数和模块都将包含在 myscope 字典中。

但是,这并不能阻止恶意代码从您的磁盘或类似文件中删除它可以删除的所有文件。

Python 2 有一个很好的模块叫做 rexec,但是从 Python 2.2 开始它就不再工作了。

它在受限环境中实现 execfile() exec 语句和 eval()。 虽然它不起作用,但它就在那里,您可以深入研究代码以了解它是如何完成的。

所以,你看,有可能只允许从外部源执行安全代码(好吧,尽可能安全)。

还有另一种方法。 您可以加载该文件,从中编译代码,然后检查它以查看它的作用。 然后说,是的,我会执行它或不,我不会。 然而,这需要更多的工作和很多复杂性。

但是,我认为没有必要经历所有这些事情。 请详细说明您的问题。 关卡编辑器到底是什么意思? 我认为外部代码不是解决方案。

您正在寻找eval函数

eval是一个函数,它接受表示为字符串的任意 python 代码并在运行时执行它。

例子

>>> x = 1
>>> y = eval('x+1')
>>> print(y)
2

它适用于 Python 2.x 和 3.x

检查文档https ://docs.python.org/2.7/library/functions.html#eval

所以我想做同样的事情。 我遇到了这个: GeeksforGeeks 有了这个,我们可以制作一个文本文件。 假设它名为 myfile.txt,在第一行中我们将在第二行添加 print("ok") 添加 A += 1。现在让我们转到脚本编辑器。

# open txt file
f = open("myfile.txt", "r")
# add the data in the file the a var
data = f.readlines()
# remove unwanted \n for new lines and '' left over by the code above
# readlines() returns a list so we need to convert data to str
# in data[] add the line you wish to read from
info = str(data[0]).strip("\n").strip("'")
# run the code
exec(info)
# running the A += 1 in the txt file
# run this
A = 0
info = str(data[1]).strip("\n").strip("'")
while A == 0:
   print(A)
   exec(info)
print(A)
# if you wanted too you can even define a variable with this
alist = ["B = 0", "B += 1", "print(B)"]
runner = [0, 1, 2, 1, 2, 0, 2]
for i in range(len(runner)):
    exec(alist[int(runner[i])])

.txt 文件示例:

def hello():
    print("Hello")

首先,您需要从 .txt 文件中读取所需的 python 代码部分

>>> with open("better.txt", 'r+') as f:
...     data = f.read()

然后将其作为python代码执行

>>> exec(data)

现在,如果您知道函数的名称,则可以从 .txt 文件中调用函数并将结果存储在变量中

>>> b = hello()
>>> print(b)
Hello

执行()

文档说:这个函数支持 Python 代码的动态执行。 object必须是字符串或代码对象。 如果它是一个字符串,则该字符串被解析为一组 Python 语句,然后执行(除非出现语法错误)。 如果它是一个代码对象,它会被简单地执行。

但是正如这个答案中提到的那样,它不安全

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM