我想製作一個機器人,它允許我定義來自irc的函數,並像Python解釋器一樣對待我的機器人。Python IRC機器人問題
例如,我想打一個機器人,可以做類似如下:
<mynick> py print "test"
<bot> test
<mynick> define hi(): print "hi"
<mynick> hi()
<bot> hi
我的問題是如何做到這一點
我想製作一個機器人,它允許我定義來自irc的函數,並像Python解釋器一樣對待我的機器人。Python IRC機器人問題
例如,我想打一個機器人,可以做類似如下:
<mynick> py print "test"
<bot> test
<mynick> define hi(): print "hi"
<mynick> hi()
<bot> hi
我的問題是如何做到這一點
如果你不擔心安全問題(如果這是一個個人項目,那麼這是一個有效的假設),那麼Python有幾個函數(compile
,exec
,eval
),可以在這裏幫助。請注意,有Python的2和Python 3之間的差異,但下面的例子既適用於:
>>> s = "print('hello world')"
>>> code = compile(s, "<string>", "exec")
>>> exec(code)
hello world
如果你打算讓其他人使用此漫遊,你將要付出非常小心注意你讓別人打電話的功能。例如,os
模塊中的大部分內容都有可能在irc bot上下文中做不希望的事情。
我寫了skybot,它的功能接近你想要的。
<rmmh> .py print "hello %03d, %s" % (5, "blah")
<skybot> Scaevolus: hello 005, blah
Python解釋器在GAE上運行,是修改爲不存儲狀態,以防止有人打破了機器人的http://shell.appspot.com/克隆。
你可以鉤住你的代碼這樣:http://tumbolia.appspot.com/py/
import urllib, urllib2
uri = 'http://tumbolia.appspot.com/py/'
response = urllib2.urlopen(uri + urllib.quote("print 'hello world!'")).read()
print response
這個解決方案的好處是,你不必擔心代碼在服務器上執行。這就是IRC bot phenny如何執行'.py'命令的python代碼。
我希望它是沙盒或只允許**你**運行Python代碼。 (不要這樣做:)'py __import __(「subprocess」)。call(['rm -rf /'])' – icktoofay 2011-04-02 03:34:25
這太好了。你有什麼問題? – 2011-04-02 03:34:41
顯然我想知道如何做到這一點。 – Colin 2011-04-02 03:35:26