【问题标题】:How do I execute code that is taken as user input? [closed]如何执行作为用户输入的代码? [关闭]
【发布时间】:2017-12-10 19:07:07
【问题描述】:

有没有办法真正获取格式良好的输入并在适当的时间执行它?

类似:

num = 5
command = input()
# do something with command

现在,如果我输入"print(num)" 作为输入,它应该输出

5

【问题讨论】:

  • 对于java,有beanshell:beanshell.org它允许解释Java源代码。
  • 在有人输入格式化您的硬盘驱动器或安装键盘记录器的程序之前,一切都是乐趣和游戏。始终以特权运行。
  • evalexec 的输入不仅格式必须正确,而且必须来自受信任的来源。 evalexec 通常应避免使用,因为它们可能存在安全风险。有关详细信息,请参阅 SO 老将 Ned Batchelder 的Eval really is dangerous。另请注意,eval / exec
  • “格式良好的输入”在现实世界中并不是一个明智的假设。除非你能证明它是好的,否则把每一个输入都当作坏的。
  • 优秀的链接,PM 2Ring。正是我想要的。它不仅回答了我的问题,不仅陈述了风险,还给了我避免此类风险的想法。再次感谢!

标签: python input


【解决方案1】:

你的建议实际上是这样工作的:

>>> x=1
>>> eval(input())
print(x)
1

您可以查看的另一种方法是 exec 方法(上面是 eval 的详细说明)。

不过,这可能不是一个好主意,具体取决于您的目的。看看localglobal参数限制环境。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2022-01-21
    相关资源
    最近更新 更多