我想构建一个可以在从其他脚本运行时控制的脚本。例如,我想像这样运行我的脚本:
~: Server &
并能够运行其中一项功能,如:
~: client func1
在我搜索时,我发现信号模块有我想要的东西,但它的信号是预先定义的,我无法发送自己的信号。
我即使使用网络框架进行客户端/服务器实现,但我认为对于我希望我的脚本拥有的功能来说太过分了。
谢谢大家。
答案 0 :(得分:7)
如果您只是尝试将命令单向发送到服务器,那么使用Python Sockets 比您想象的更容易。代码示例当然是准分子,因为它们不进行错误处理,并且不会多次调用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()
这是一个向其发送命令的客户端程序。
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)
答案 1 :(得分:3)
所以你需要和正在运行的流程交谈吗? unix域套接字的想法怎么样?
在你的服务器中,你可以在你的unix文件系统的路径上建立一个套接字,然后与你客户端中的那个套接字通话,就像我用google搜索的链接中描述的那样: