将命令从命令行发送到Unix中正在运行的Python脚本

时间:2014-04-18 05:55:04

标签: python unix client-server

我想构建一个可以在从其他脚本运行时控制的脚本。例如,我想像这样运行我的脚本:

~: Server &

并能够运行其中一项功能,如:

~: client func1

在我搜索时,我发现信号模块有我想要的东西,但它的信号是预先定义的,我无法发送自己的信号。

我即使使用网络框架进行客户端/服务器实现,但我认为对于我希望我的脚本拥有的功能来说太过分了。

谢谢大家。

2 个答案:

答案 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搜索的链接中描述的那样:

http://pymotw.com/2/socket/uds.html