1

PHPのようにPythonにインクルードする方法はありますか? これはインポート機能とは異なります

私は Python の初心者で、Irc ボットを作成しています。

私がやりたいことを説明させてください。これはこれまでのスクリプトです

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

私がやりたいのは、中にインクルードを入れて、このような別の.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')

関数.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 に答える