有没有办法像在PHP中一样在python中进行包含? 这与导入功能
不同我是python的初学者,正在写一个Irc Bot。
让我解释一下我想做什么,这是迄今为止的剧本
import socket
network = 'irc.irchighway.net'
port = 6667
nick = 'bot';
canal = '#channel'
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ( 'NICK '+nick+'\r\n' )
irc.send ( 'USER '+nick+' '+nick+' '+nick+' :Python IRC\r\n' )
irc.send ( 'PRIVMSG nickserv : identify xxxxx\r\n' )
irc.send ( 'JOIN '+canal+'\r\n' )
irc.send ( 'PRIVMSG '+canal+' :Im here\r\n' )
while True:
data = irc.recv ( 4096 )
if data.find ( 'PING' ) != -1:
irc.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )
print data
我想做的是在while中放入一个include,并创建另一个.py,类似这样的
bot.py
import socket
network = 'irc.irchighway.net'
port = 6667
nick = 'bot';
canal = '#channel'
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ( 'NICK '+nick+'\r\n' )
irc.send ( 'USER '+nick+' '+nick+' '+nick+' :Python IRC\r\n' )
irc.send ( 'PRIVMSG nickserv : identify xxxxx\r\n' )
irc.send ( 'JOIN '+canal+'\r\n' )
irc.send ( 'PRIVMSG '+canal+' :Im here\r\n' )
while True:
include('function.py')
functions.py
data = irc.recv ( 4096 )
if data.find ( 'PING' ) != -1:
irc.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )
print data
通过这种方式,我可以修改function.py文件并更改僵尸程序的行为,而无需停止脚本,这意味着僵尸程序将断开连接并重新连接到irc服务器。
有没有办法做到这一点?
答案 0 :(得分:1)
没有,也不应该。那很简单! 如果你认为你必须动态生成代码(提示:通常你没有),在你正在运行的文件中的字符串中执行它,并使用“exec”编译它 - 不需要将其编写为Python代码一个文本文件并导入它。
现在,您可以使用“重新加载”内置函数来执行您所描述的操作 - 但它远离干净的设计。
你“不能做”的确是在编译之前将另一个文件作为文本粘贴到当前文件中 - 就像它在PHP中发生一样。
答案 1 :(得分:0)
你可以这样做......但这只是为了调试,好吗?
bot.py
:
import socket
import helper
def main():
network = 'irc.irchighway.net'
port = 6667
nick = 'bot';
canal = '#channel'
irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
irc.connect ((network, port, ))
print irc.recv(4096)
irc.send ('NICK '+nick+'\r\n')
irc.send ('USER '+nick+' '+nick+' '+nick+' :Python IRC\r\n')
irc.send ('PRIVMSG nickserv : identify xxxxx\r\n')
irc.send ('JOIN '+canal+'\r\n' )
irc.send ('PRIVMSG '+canal+' :Im here\r\n')
while True:
reload(helper)
helper.do_thing(irc)
if __name__ == '__main__':
main()
helper.py
:
def do_thing(sock):
data = sock.recv(4096)
if 'PING' in data:
irc.send ('PONG ' + data.split()[1] + '\r\n')
print data