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

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

~: Server &

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

~: client func1

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

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

谢谢你们.

最佳答案
如果您只是尝试将命令单向发送到服务器,那么使用Python的Sockets比您想象的要容易.代码示例当然是准确的,因为它们不进行错误处理,并且不调用recv multiple确保消息完整的时间.这只是为了让您了解处理命令所需的代码行数.

这是一个服务器程序,它只接收消息并打印到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)

转载注明原文:将命令从命令行发送到Unix中正在运行的Python脚本 - 代码日志