68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| import argparse
 | |
| import cmd
 | |
| import logging
 | |
| import sys
 | |
| import zmq
 | |
| 
 | |
| HELP = '''
 | |
| Provide a shell used to send interactive commands to a zmq filter.
 | |
| 
 | |
| The command assumes there is a running zmq or azmq filter acting as a
 | |
| ZMQ server.
 | |
| 
 | |
| You can send a command to it, follwing the syntax:
 | |
| TARGET COMMAND [COMMAND_ARGS]
 | |
| 
 | |
| * TARGET is the target filter identifier to send the command to
 | |
| * COMMAND is the name of the command sent to the filter
 | |
| * COMMAND_ARGS is the optional specification of command arguments
 | |
| 
 | |
| See the zmq/azmq filters documentation for more details, and the
 | |
| zeromq documentation at:
 | |
| https://zeromq.org/
 | |
| '''
 | |
| 
 | |
| logging.basicConfig(format='zmqshell|%(levelname)s> %(message)s', level=logging.INFO)
 | |
| log = logging.getLogger()
 | |
| 
 | |
| 
 | |
| class LavfiCmd(cmd.Cmd):
 | |
|     prompt = 'lavfi> '
 | |
| 
 | |
|     def __init__(self, bind_address):
 | |
|         context = zmq.Context()
 | |
|         self.requester = context.socket(zmq.REQ)
 | |
|         self.requester.connect(bind_address)
 | |
|         cmd.Cmd.__init__(self)
 | |
| 
 | |
|     def onecmd(self, cmd):
 | |
|         if cmd == 'EOF':
 | |
|             sys.exit(0)
 | |
|         log.info(f"Sending command: {cmd}")
 | |
|         self.requester.send_string(cmd)
 | |
|         response = self.requester.recv_string()
 | |
|         log.info(f"Received response: {response}")
 | |
| 
 | |
| 
 | |
| class Formatter(
 | |
|     argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFormatter
 | |
| ):
 | |
|     pass
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     parser = argparse.ArgumentParser(description=HELP, formatter_class=Formatter)
 | |
|     parser.add_argument('--bind-address', '-b', default='tcp://localhost:5555', help='specify bind address used to communicate with ZMQ')
 | |
| 
 | |
|     args = parser.parse_args()
 | |
|     try:
 | |
|         LavfiCmd(args.bind_address).cmdloop('FFmpeg libavfilter interactive shell')
 | |
|     except KeyboardInterrupt:
 | |
|         pass
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     main()
 |