Словарь поиска подпроцесса Python не может писать или читать (или что-то еще) - PullRequest
0 голосов
/ 06 ноября 2018

так что я собираю этого бота, который исполняет команды на сервер для размещения некоторых игр.

У меня есть словарь в форме {'Game Name': 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)

Позже, когда я получаю доступ к словарю, ссылка на подпроцесс. Похоже, что там нет? Попытка написать, прочитать или связаться с процессом ничего не делает, так как не выводит никаких ошибок!

Я пробовал много способов писать или читать из stdin или stdout соответственно, просматривая другие подобные вопросы здесь, и все же ничего не происходит. Я что-то пропустил полностью или мне нужно что-то делать?

1 Ответ

0 голосов
/ 06 ноября 2018

У вас сложилось впечатление, что глобальная переменная является общей для процессов. Это не . Ваши варианты:

  1. Используйте multiprocessing.Array или multiprocessing.Value, чтобы поделиться состоянием.
  2. Использовать multiprocessing.Manager.
  3. Используйте какой-нибудь IPC.

Менеджер, кажется, лучше подходит для вашей задачи, потому что он позволяет вам использовать словари.

...