Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将字符串转换为所需的格式?_Python_String_Compilation_Strip Tags - Fatal编程技术网

Python 如何将字符串转换为所需的格式?

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 =

你好!我正在尝试实现一个测试知识的模块。用户被赋予了任务,他编写了正在服务器上发送和执行的决策。下面是一个问题。文件中存储有原始数据。范例- 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 = 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.5
output=exec('\n'.join(contents))语法错误:无效语法
我的代码是为Python 3编写的。现在我把它改成了Python2(Python3行被注释掉了),谢谢你,但是它仍然不起作用。显示相同的错误。我在pyton3上启动了它,但是结果没有写入变量输出并返回NoneOh yes。我发现了问题,认为现在应该可以解决了。答案中的第二个选项可能是更好的解决方案。