Python: как выйти из процесса, который все еще работает, и ждать вывода - PullRequest
0 голосов
/ 10 апреля 2019

Итак, у меня есть server, который прослушивает соединения и клиент, который отправил сообщения на server

Сообщения от client до server содержат путь к файлу, который существует на server машина

клиент

import sys
import socket

# Validate arguments.
if len(sys.argv) < 3:
    raise Exception('\n\nYou must specify at least 2 arguments:\n1. Server ip address.\n2. Message to server.')

# Validate server ip address.
try:
    socket.inet_aton(sys.argv[1])
    ip = sys.argv[1]
except socket.error:
    raise Exception('{ip} is not valid IPv4 address'.format(ip=sys.argv[1]))

# In case message contains spaces, Join.
message = ' '.join(sys.argv[2:])
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 4500
address = (ip, port)

client = socket.socket()
client.connect(address)
client.sendall('{message}'.format( message=message).encode('utf-8'))

response = client.recv(1024).decode('utf-8')
print(response)

сервер

import socket
import subprocess


def process_message(file, client):
    process = subprocess.Popen([file], stdout=subprocess.PIPE)
    while True:
        output = process.stdout.readline()
        str-output.decode('utf-8')
        client.send(str)

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
name = socket.gethostname()
ip = '127.0.0.1'
port = 4500
address = (ip, port)
server.bind(address)
server.listen(5)

while True:
    client, address_info = server.accept()
    while True:
        data = client.recv(1024).decode('utf-8')
        process_message(data, client)
        client.close()
        break

Так, как вы можете видеть в моем serverкод я беру сообщение client (file path) и открываю процесс (запускаю этот файл, обычно это файл batch), читаю вывод и возвращаю каждую строку обратно в client.

Моя проблема в том, что когда я запускаю batch файл, который запускается appium server, потому что в этом случае appium process продолжает работать, и мой код просто складывается и ждет output, и все, что я хочу, этодождитесь определенной строки в process output (например, listening on) и выйдите.

Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...