1

有什么方法可以像在 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,像这样

僵尸软件

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')

函数.py

data = irc.recv ( 4096 )
if data.find ( 'PING' ) != -1:
    irc.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )    
print data

这样我就可以修改 function.py 文件并更改机器人的行为方式,而无需停止脚本,这意味着机器人将断开连接并重新连接到 irc 服务器。

有没有办法做到这一点?

4

2 回答 2

1

没有,也不应该有。就这么简单!如果您认为必须即时生成代码(提示:通常您不需要),请在您正在运行的文件中的字符串中执行此操作,然后使用“exec”编译它 - 无需将其编写为 Python 代码一个文本文件并导入它。

现在,您可以使用“重新加载”内置功能来执行您所描述的操作 - 但它远不是一个干净的设计。

您真正“不能做”的是在编译之前将另一个文件作为文本粘贴到当前文件中 - 就像在 PHP 中发生的那样。

于 2013-02-01T18:53:03.967 回答
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
于 2013-02-01T18:58:53.027 回答