поэтому я собираю этого бота разногласий, который выполняет команды на сервере для размещения некоторых игр.
У меня есть словарь в виде {'Имя игры': subprocess.Popen()}
subprocess_LOOKUP = {}
нам нужно сохранить, чтобы позже вводить команды для изменения режимов игры и тому подобное на лету.
Я упростил код до двух небольших функций, чтобы ясно показать проблемы.
import subprocess
from subprocess import PIPE, STDOUT
subprocess_LOOKUP = {}
def gamestart(game, startcmd):
#Open pipe with all parameters to read, write and communicate
p = subprocess.Popen(startcmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=PIPE, shell=True)
subprocess_LOOKUP.update({ game : p }) #Store into dictionary here
def gameinput(game, cmd):
p = subprocess_LOOKUP[game] #Retrieve from dictionary
print(cmd) #Prints the command I want to input into the shell
print(p.stdout.readline()) #Does Nothing (prints no errors)
p.stdin.write(str.encode(cmd)) #Does Nothing (prints no errors)
p.communicate()[0] #Does Nothing (prints no errors)
p.stdin.close() #Does Nothing (prints no errors)
Позже, когда я обращаюсь к словарю, ссылки на subprocess.Popen() там нет? Попытка написать, прочитать или связаться с процессом ничего не дает, так как не выводит никаких ошибок!
Я пробовал много способов писать или читать со стандартного ввода или стандартного вывода соответственно, просматривая другие подобные вопросы здесь, и все же ничего не происходит. Я что-то совсем пропустил или мне нужно что-то сделать?