Итак, у меня есть 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
) и выйдите.
Есть предложения?