首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将输入文件中的字符串作为python代码运行?

如何将输入文件中的字符串作为python代码运行?
EN

Stack Overflow用户
提问于 2017-10-24 20:02:34
回答 1查看 37关注 0票数 1

我正在创作类似于文字冒险游戏的东西。我有一个.yaml文件,这是我的输入。这个文件看起来像这样

代码语言:javascript
运行
复制
node_type: 
  action
title: 
  Do some stuff
info: 
  This does some stuff and things
script:
  'print("hello world")
  print(ret_val)
  foo.bar(True)
  ret_val = (foo.bar() == True)
  if (thing):
      print(thing)
  print(ret_val)
  '

我的最终目标是让我的python程序运行yaml文件的脚本部分,就像它已经被粘贴到主代码中一样。(我知道我不应该像这样运行用户输入,但我是唯一一个编写这些节点的人,也是唯一使用这个程序的人,所以我基本上忽略了这个事实.)

目前,我的尝试如下:我使用pyyaml将我的yaml文件加载为一个dict。

代码语言:javascript
运行
复制
node = yaml.safe_load(file.yaml)

然后我尝试使用exec来运行我的代码,遇到很多问题,我不能运行if语句,我只是得到一个语法错误,我无法从我的代码中获得任何类型的返回值。我试过这样做是为了:

代码语言:javascript
运行
复制
def main()
    ret_val = "test";
    thing = exec(node['script'], globals(),locals())
    print(ret_val)

当使用上面的.yaml文件运行时,它会打印

代码语言:javascript
运行
复制
>> hello world
>> test
>> True
>> test   

由于某些原因,即使我把它们喂给了exec,也没有真正修改我的任何主要变量。

有没有办法让我解决这些问题,或者有没有一个更好的方法来做这件事?

EN

回答 1

Stack Overflow用户

发布于 2017-10-24 20:20:42

这样做的一种方法是解析代码并将其保存到.py文件中,可以从该文件动态导入,例如通过进口库导入。

您可能希望将解析的代码封装到一个函数中,然后可以轻松调用该函数来调用您的操作。此外,在那里指定一些默认导入也是有意义的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46919107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档