Skip to main content
 首页 » 编程设计

python之如何将字符串转换为所需的形式

2025年05月04日19findumars

美好的一天!我正在尝试实现一个测试知识的模块。用户被赋予了任务,他写下了在服务器上发送和执行的决定。下面的问题。文件中存储了原始数据。例子 - 一 = 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。 create_decision 看起来是这样的:

一个

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() 从条件列表中生成一个字符串。否则你无法将它写入文件或执行它(我已经在上面的函数中完成了)。

编辑:我的代码中有一个错误(exec 没有返回任何东西)所以我添加了一个带有 eval 的方法(但这不适用于打印,因为它计算并返回一个表达式的结果,更多信息 here )。第二种方法捕获 print 的输出,而 stdoutIO 来自另一个问题/答案 (here)。此方法返回 print 的输出,但有点复杂。