所以我将这个不和谐的机器人放在一起,该机器人执行命令到服务器来托管一些游戏。
我有一个字典,格式为{'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)
稍后,当我访问字典时,对subprocess.Popen()的引用似乎不存在?尝试写,读或与该进程通信无济于事,也不会打印任何错误!
我通过查看此处的其他类似问题,尝试了多种方法分别从stdin或stdout进行写入或读取,但是仍然没有任何反应。我是否完全错过了某些事情,还是需要做些什么?
答案 0 :(得分:1)
您的印象是,全局变量在进程之间共享。 It is not。您的选择是:
multiprocessing.Array
或multiprocessing.Value
共享状态。multiprocessing.Manager
。管理器似乎更适合您的问题,因为它允许您使用字典。