我现在正在做一个瑞士军队Linux。我遇到了运行命令的情况,然后将其传输到HTTP服务器,该服务器只为该流提供服务。这是整个场景:
使用类似
的行启动服务器$ httpondemand parecord
服务器无法立即启动parecord。
HTTP客户端连接。
$ wget -O - http://server/ | mpv -
我可以HAZ" /"
我即将自己编写这个工具,但我想我是否已经知道是否有任何能够做到这一点。
答案 0 :(得分:0)
我找不到一个可以做到这一点的工具,所以我最终写了一个,由于超出本文档范围的原因,它被命名为todd
。我仍然宁愿使用已经存在的东西,所以这不是我理想的解决方案。
#!/usr/bin/env python
from socketserver import TCPServer
from http.server import BaseHTTPRequestHandler
import subprocess as sp
from sys import *
class ToddHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
# Do not start the command until after a connection has been made.
p = sp.Popen(argv[1:], stdout=sp.PIPE)
while True:
data = p.stdout.read(1024)
if len(data) == 0:
break
try:
self.wfile.write(data)
except BrokenPipeError:
break
except ConnectionResetError:
break
p.stdout.close()
p.wait() # Kill the zombie.
if len(argv) == 1:
stderr.write('usage: todd command [arg1 arg2 ...]\n')
# Create the server.
server = TCPServer(('', 10000), ToddHandler)
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()