Nano Hash - криптовалюты, майнинг, программирование

Словарь поиска подпроцесса Python Popen не может писать или читать (или что-то еще)

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

У меня есть словарь в виде {'Имя игры': 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() там нет? Попытка написать, прочитать или связаться с процессом ничего не дает, так как не выводит никаких ошибок!

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


  • только что попробовал с p = subprocess_LOOKUP.get(game) все еще не работает. 06.11.2018

Ответы:


1

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

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

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

06.11.2018
  • Совсем забыл, блин! Большое спасибо! И за то, что подсказали, как вы думаете, спасибо :) 06.11.2018
  • Я бы использовал multiprocessing.Manager, если только производительность не является проблемой (он создает другой процесс, так что, вы знаете, ресурсы и прочее) 07.11.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..