Subprocess:уходит в бесконечный простой,если команда не даёт вывода
При выполнении программы в новом процессе, subprocess ждёт до конца её выполнения и выдаёт output. Но когда я пытаюсь запустить команду, которая не даёт вывода, допустим del, программа виснет и мне приходится перезаходить.
Частично решил проблему, используя метод Popen.communicate(), но он выдаёт кортеж, который не удаётся конвертировать в строку.
В этом случае кидает исключение:
TypeError: sequence item 1: expected str instance, NoneType found
'Код'
import subprocess
import time
sock = socket.socket()
HOST = '0.0.0.0'
PORT = 6000
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((HOST, PORT))
print('Socket is binded on address {}'.format(HOST))
sock.listen(5)
print('Socket is listening on port {}'.format(PORT))
while True:
client, address = sock.accept()
print('Got a connection from {}'.format(address))
if client:
while True:
data = client.recv(10024)
if data == b'':
time.sleep(5)
break
else:
try:
print(data)
datalist = data.decode('utf-8').split(',')
proc = subprocess.Popen(datalist[0], cwd=datalist[1], shell=True, stdout=subprocess.PIPE, text=True, universal_newlines=True, stdin=subprocess.PIPE)
output = proc.communicate()
string = ''.join(output)
client.send(output.encode('utf-8'))
except PermissionError:
print('Access denied for {}'.format(data.decode('utf-8')))
client.close()
break
else:
continue