Python 如何将字符串转换为所需的格式?
你好!我正在尝试实现一个测试知识的模块。用户被赋予了任务,他编写了正在服务器上发送和执行的决策。下面是一个问题。文件中存储有原始数据。范例- a=5 b=7 字符串中存储了一个自定义解决方案。范例Python 如何将字符串转换为所需的格式?,python,string,compilation,strip-tags,Python,String,Compilation,Strip Tags,你好!我正在尝试实现一个测试知识的模块。用户被赋予了任务,他编写了正在服务器上发送和执行的决策。下面是一个问题。文件中存储有原始数据。范例- a=5 b=7 字符串中存储了一个自定义解决方案。范例 s = a * b p = a + b print s,p 现在,它全部以字符串形式写入一个单独的文件中 'a = 5\n', 'b = 7', u's = a * b\r\np = a + b\r\nprint s,p' 如何做到这一点,以便可以执行所使用的代码。会是那样的 a = 5 b =
s = a * b
p = a + b
print s,p
现在,它全部以字符串形式写入一个单独的文件中
'a = 5\n', 'b = 7', u's = a * b\r\np = a + b\r\nprint s,p'
如何做到这一点,以便可以执行所使用的代码。会是那样的
a = 5
b = 7
s = a * b
p = a + b
print s,p
这是我创建解决方案并在必要时执行的函数
def create_decision(user_decision, conditions):
f1 = open('temp_decision.py', 'w')
f = open(conditions, 'r+')
contents = f.readlines()
contents.append(user_decision)
f1.write(str(contents))
f1.close()
output = []
child_stdin, child_stdout, child_stderr = os.popen3("python temp_decision.py")
output = child_stdout.read()
return output
或者告诉我我做错了什么?谢谢 您可以执行如下字符串:
exec(“code”)
您不需要创建临时文件,只需使用exec
<代码>创建决策看起来是这样的:
A
def create_decision(user_decision, conditions):
f = open(conditions, 'r+')
contents = f.readlines()
contents.append(user_decision)
# join list entries with a newline between and return result as string
output = eval('\n'.join(contents))
return output
B
import sys
import StringIO
import contextlib
@contextlib.contextmanager
def stdoutIO(stdout=None):
old = sys.stdout
if stdout is None:
stdout = StringIO.StringIO()
sys.stdout = stdout
yield stdout
sys.stdout = old
def create_decision(user_decision, conditions):
f = open(conditions, 'r+')
contents = f.readlines()
contents.append(user_decision)
with stdoutIO() as output:
#exec('\n'.join(contents)) # Python 3
exec '\n'.join(contents) # Python 2
return output.getvalue()
您还应该使用str.join()
从条件列表中生成一个字符串。否则,您无法将其写入文件或执行它(我已经在上面的函数中完成了)
Edit:我的代码中有一个bug(
exec
不返回任何内容),因此我添加了一个带有eval
的方法(但这对print不起作用,因为它计算并返回一个表达式的结果,即更多信息)。第二种方法捕获print
的输出,stdoutIO
来自另一个问题/答案()。此方法返回打印输出,但有点复杂。如果使用python 2.x,这将是exec“code”
。我不明白问题出在哪里。开始示例后,在字母“c”上显示以下错误。Python v.2.7.5output=exec('\n'.join(contents))语法错误:无效语法
我的代码是为Python 3编写的。现在我把它改成了Python2(Python3行被注释掉了),谢谢你,但是它仍然不起作用。显示相同的错误。我在pyton3上启动了它,但是结果没有写入变量输出并返回NoneOh yes。我发现了问题,认为现在应该可以解决了。答案中的第二个选项可能是更好的解决方案。