2013-02-01 2 views
1

PHP와 같이 파이썬에서 포함하는 방법이 있습니까? 이 가져 오기 기능파이썬에 포함?

처럼되지 않습니다 나는 파이썬 초보자이야와 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 

내가가있는 동안 내부에 포함 넣고 할, 다른 평을 만들려면 무엇, 뭔가

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 서버에 다시 연결한다는 것을 의미하는 스크립트를 중지하지 않고도 봇의 작동 방식을 변경할 수 있습니다.

그런 방법이 있습니까?

+5

이 왜 기능을 사용할 수 있습니까? – cha0site

+0

'exec'가 있지만 ... ... yuck ... – mgilson

+0

함수를 작성하고 가져 와서 필요한 곳에 호출해야합니다. –

답변

1

존재하지 않아야합니다. 간단 해! 실행 중에 코드를 생성해야한다고 생각하는 경우 (힌트 : 일반적으로 그렇지 않음), 실행중인 파일의 문자열에서 수행하고 "exec"로 컴파일하십시오 - 파이썬 코드로 작성할 필요가 없습니다 텍스트 파일에 저장하고 가져옵니다.

이제는 "reload"내장 함수를 사용하여 설명하는대로 원하는대로 할 수 있습니다. 하지만 깨끗한 디자인은 멀리 떨어져 있습니다.

"할 수없는 일"은 컴파일하기 전에 다른 파일을 현재 파일의 텍스트로 붙여 넣는 것입니다. PHP에서와 같이.

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