2010-09-09 6 views
1

comment obtenir les résultats de exec() dans python 3.1? L'expression exec ne renvoie pas de valeur. Utilisez la fonction eval insted.comment obtenir des résultats de exec() dans 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) 

Répondre

2

print "result:", eval(cmd) 

Mise à jour: Si vous avez encore ce que je suis venu avec ce hack lors de la création interpréteur 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 
+0

merci pour votre responce jcubic. mais j'ai parfois besoin d'exécuter non seulement des expressions, j'ai aussi besoin d'exécuter des instructions. :( – 66neo99

+0

Vous pouvez également consulter ma recette sur activestate http://goo.gl/ZMV5X – jcubic

Questions connexes