像python一样包含?

时间:2013-02-01 18:42:12

标签: python import include

有没有办法像在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服务器。

有没有办法做到这一点?

2 个答案:

答案 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