Я создаю настольную игру и короткую короткую историю: мне нужен файл, который запустит и установит основные переменные игры (имя игрока, доска (массив), подсказка, статус - play/gameover) и экспортировать их как .json-файл. Установленный файл представляет собой большой файл GIU, поэтому я хотел бы запустить основную игру (логику и отображение) в отдельном файле.Передача JSON не работает между процессами
Я занимаюсь этим с помощью простой игры tic-tac-toe, но по какой-то причине я не могу получить json-файл для правильного экспорта/импорта (не могу сказать, какой) ИЛИ не может получить функцию ввода для работы в отдельной функции.
(код очень простой и по-прежнему неполный, но я просто пытаюсь сделать первый шаг для работы - запустите, попросите имя, затем запустите файл с функцией, которая отобразит доску и попросит пользователей следующий шаг)
раствор 1) с использованием subprocess.Popen
file1:
import json, subprocess, os
from distlib.compat import raw_input
print('Welcome to TIC-TAC-TOE!')
print()
#Set up of the start information that is going to be passed as JSON payload and sent to each process back and forth
#------------------------------------------------
name = raw_input('Please enter your name: ')
prompt = 'select a space: '
board = [0,1,2,
3,4,5,
6,7,8]
move = None
status = 'playing'
winner = None
iter = 0
#------------------------------------------------
#JSON payload {dictionary} to be sent
info = {'name':name, 'prompt':prompt, 'board':board, 'move':move, 'status': status, 'winner': winner, 'iter': iter, }
print('START, info dictionary as it goes out: ', info)
#file out which dumps info the info.json file
fout = open('info.json', 'w')
json.dump(info, fout)
fout.close
subprocess.Popen(["python3", "engineANDvisuals.py"])
файл 2) 'engineANDvisuals.py'
#imported libraries
import random, funcs as f, json
from distlib.compat import raw_input
#front-end: iterface function
def interface(jsonFile):
fin = open(jsonFile, 'r') #open up the json file to read
info = json.load(fin) #load json file as info
fin.close #close the json file
print('FRONT, info dictionary as it comes IN: ', info)
print()
name = info['name'] #set json-name to name
prompt = info['prompt'] #set json-prompt to prompt
board = info['board'] #set json-board to board
winner = info['winner'] #set json-winner to winner
status = info['status'] #set json-status to status
f.printBoard(board) #prints out the board so that the user can see it
print(info['move'])
info['move'] = input(f.returnName(name)+', please '+ f.returnPrompt(prompt))
print('FRONT, info dictionary as it goes OUT: ', info)
fout = open(jsonFile, 'w') #open up the json file to write
json.dump(info, fout) #dumps new info into the file
fout.close #closes the json file
f.functions - это простые функции печати, расположенные в другом файле. С помощью этого метода я добираюсь до строки ввода во втором файле, а затем программа просто останавливается. Он не заканчивается, мои ядра не работают вообще (так что я не думаю, что это в цикле), он просто останавливается после того, как программа запрашивает пространство.
метод 2) теперь, если я использую os.system вместо этого, чтобы открыть процесс, он дает мне огромную ошибку, которую я воспринимаю, чтобы означать, что он импортирует/экспортирует json-файл неправильно.
Traceback (most recent call last):
File "engineANDvisuals.py", line 105, in <module>
interface('info.json')
File "engineANDvisuals.py", line 19, in interface
info = json.load(fin) #load json file as info
File "/usr/lib/python3.4/json/__init__.py", line 268, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.4/json/__init__.py", line 318, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.4/json/decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.4/json/decoder.py", line 361, in raw_decode
raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)
Я так безумно путаю, потому что, когда я запускаю второй файл один после первого, он отлично работает.
Я бы очень признателен за помощь, я знаю, что это, вероятно, какой-то глупый промах, нуб действительно может использовать какую-то помощь, спасибо вам большое.
'engineANDvisuals.py' содержит только определение функции. – martineau