Sha*_*ism 4 python unix client-server
我想构建一个可以在从另一个脚本运行时控制的脚本.例如,我想像这样运行我的脚本:
~: Server &
Run Code Online (Sandbox Code Playgroud)
并能够运行其中一个功能,如:
~: client func1
Run Code Online (Sandbox Code Playgroud)
在我搜索时,我发现信号模块有我想要的东西,但它的信号是预先定义的,我无法发送自己的信号.
我即使使用网络框架进行客户端/服务器实现,但我认为这对于我希望我的脚本具有的能力来说太过分了.
谢谢你们.
如果您只是尝试将命令单向发送到服务器,那么使用Python的套接字比您想象的要容易.代码示例当然是准分子,因为它们不进行错误处理,并且不会多次调用以确保消息完整.这只是为了让您了解处理命令所需的代码行数.recv
这是一个简单地接收消息和打印的服务器程序stdout.请注意,我们使用线程,以便服务器可以同时监听多个客户端.
import socket
from threading import Thread
MAX_LENGTH = 4096
def handle(clientsocket):
while 1:
buf = clientsocket.recv(MAX_LENGTH)
if buf == '': return #client terminated connection
print buf
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
PORT = 10000
HOST = '127.0.0.1'
serversocket.bind((HOST, PORT))
serversocket.listen(10)
while 1:
#accept connections from outside
(clientsocket, address) = serversocket.accept()
ct = Thread(target=handle, args=(clientsocket,))
ct.start()
Run Code Online (Sandbox Code Playgroud)
这是一个向其发送命令的客户端程序.
import socket
import sys
HOST = '127.0.0.1'
PORT = 10000
s = socket.socket()
s.connect((HOST, PORT))
while 1:
msg = raw_input("Command To Send: ")
if msg == "close":
s.close()
sys.exit(0)
s.send(msg)
Run Code Online (Sandbox Code Playgroud)