在python中包含类似的内容?
有没有什么方法可以像php一样在python中进行包含? 这与导入函数不同 我是python的初学者,正在编写一个Irc机器人 让我解释一下我想做什么,这是目前为止的剧本在python中包含类似的内容?,python,import,include,Python,Import,Include,有没有什么方法可以像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 (
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文件并更改bot的行为,而无需停止脚本,这意味着bot将断开连接并重新连接到irc服务器
有没有办法做到这一点?没有,也不应该有。就这么简单! 如果您认为必须动态生成代码(提示:通常不需要),请在正在运行的文件中以字符串形式生成代码,并使用“exec”进行编译—无需将其作为Python代码写入文本文件并导入 现在,您可以使用“重新加载”内置函数来执行您所描述的操作- 但这远远不是一个干净的设计
“不能做”的是在编译之前将另一个文件作为文本粘贴到当前文件中,就像在PHP中一样。没有,也不应该有。就这么简单! 如果您认为必须动态生成代码(提示:通常不需要),请在正在运行的文件中以字符串形式生成代码,并使用“exec”进行编译—无需将其作为Python代码写入文本文件并导入 现在,您可以使用“重新加载”内置函数来执行您所描述的操作- 但这远远不是一个干净的设计
您“不能做”的是在编译之前将另一个文件作为文本粘贴到当前文件中,就像在PHP中一样。您可以这样做。。。但这只是为了调试,好吗
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()
def do_thing(sock):
data = sock.recv(4096)
if 'PING' in data:
irc.send ('PONG ' + data.split()[1] + '\r\n')
print data
helper.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()
def do_thing(sock):
data = sock.recv(4096)
if 'PING' in data:
irc.send ('PONG ' + data.split()[1] + '\r\n')
print data
你可以这样做。。。但这只是为了调试,好吗
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()
def do_thing(sock):
data = sock.recv(4096)
if 'PING' in data:
irc.send ('PONG ' + data.split()[1] + '\r\n')
print data
helper.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()
def do_thing(sock):
data = sock.recv(4096)
if 'PING' in data:
irc.send ('PONG ' + data.split()[1] + '\r\n')
print data
有
exec
。。。但是糟糕…你应该编写一个函数,导入它,并在需要的地方调用。这就是为什么存在对象、配置文件以及那些将配置文件作为参数的对象的构造函数/工厂/构建器。甚至,正如@cha0site所说,只是简单的函数。我无法导入函数,我已经尝试过了,但在我看来,即使导入很困难,python也只导入一次,因此如果我在bot.py运行时修改functions.py,它根本不会影响代码。您可以强制重新导入,但这完全没有抓住重点。不要尝试将文件作为python导入;使用JSON或XML等外部配置文件,在每个循环开始时读取该文件,然后使用从配置加载的值来运行操作。然后,您可以在程序运行时修改配置文件。。。但是糟糕…你应该编写一个函数,导入它,并在需要的地方调用。这就是为什么存在对象、配置文件以及那些将配置文件作为参数的对象的构造函数/工厂/构建器。甚至,正如@cha0site所说,只是简单的函数。我无法导入函数,我已经尝试过了,但在我看来,即使导入很困难,python也只导入一次,因此如果我在bot.py运行时修改functions.py,它根本不会影响代码。您可以强制重新导入,但这完全没有抓住重点。不要尝试将文件作为python导入;使用JSON或XML等外部配置文件,在每个循环开始时读取该文件,然后使用从配置加载的值来运行操作。然后,您可以在程序运行时修改配置文件。