Как получить результаты из exec () в Python 3.1? - PullRequest
1 голос
/ 09 сентября 2010

как получить результаты из exec () в python 3.1?

#!/usr/bin/python
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = socket.gethostname()
port = 1234
sock.bind((host,port))

ret_str = "executed"

while True:
    cmd, addr = sock.recvfrom(1024)
    if len(cmd) > 0:
        print("Received ", cmd, " command from ", addr)
        exec(cmd) # here I need execution results returns to ret_str
        print( "results:", ret_str )

1 Ответ

2 голосов
/ 09 сентября 2010

выражение exec не возвращает значение, используйте функцию eval insted.

print "result:", eval(cmd)

Обновление: Если вам все еще нужно это, я придумал этот хак при создании Python JSON-RPCпереводчик http://trypython.jcubic.pl

import sys
from StringIO import StringIO
__stdout = sys.stdout
sys.stdout = StringIO()
try:
    #try if this is a expression
    ret = eval(code)
    result = sys.stdout.getvalue()
    if ret:
        result = result + ret
except:
    try:
        exec(code)
    except:
        #you can use <traceback> module here
        result = 'Exception'
    else:
        result = sys.stdout.getvalue()
sys.stdout = __stdout
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...