Я пытаюсь написать оболочку python вокруг знаменитой программы Go GnuGo. Мой подход (и я не уверен, что это будет работать) заключается в использовании Popen модуля подпроцесса для запуска GnuGo в GTP (режим текстового протокола). В интерпретаторе это выглядит так:Почему subprocess.Popen висит при открытии gnugo?
>>> import subprocess
>>> game = subprocess.Popen(['gnugo', '--mode', 'gtp'])
>>>
Интерпретатор тогда висит, но не полностью. Если я подожду некоторое время, я могу получить каждое третье нажатие клавиши, чтобы появиться в командной строке. Если я использую shell=True
аргумент, то GnuGo запускается в режиме ASCII, который выглядит следующим образом:
A B C D E F G H J K L M N O P Q R S T
19 . . . . . . . . . . . . . . . . . . . 19
18 . . . . . . . . . . . . . . . . . . . 18
17 . . . . . . . . . . . . . . . . . . . 17
16 . . . + . . . . . + . . . . . + . . . 16
15 . . . . . . . . . . . . . . . . . . . 15
14 . . . . . . . . . . . . . . . . . . . 14
13 . . . . . . . . . . . . . . . . . . . 13
12 . . . . . . . . . . . . . . . . . . . 12
11 . . . . . . . . . . . . . . . . . . . 11
10 . . . + . . . . . + . . . . . + . . . 10
9 . . . . . . . . . . . . . . . . . . . 9
8 . . . . . . . . . . . . . . . . . . . 8
7 . . . . . . . . . . . . . . . . . . . 7
6 . . . . . . . . . . . . . . . . . . . 6
5 . . . . . . . . . . . . . . . . . . . 5
4 . . . + . . . . . + . . . . . + . . . 4
3 . . . . . . . . . . . . . . . . . . . 3
2 . . . . . . . . . . . . . . . . . . . 2
1 . . . . . . . . . . . . . . . . . . . 1
A B C D E F G H J K L M N O P Q R S T
black(1):
В режиме GTP, GnuGo начинается и ожидает некоторого ввода без печати ничего к терминалу.
Может ли кто-нибудь пролить свет на то, почему это происходит?
как gnugo и питон пытается читать из того же терминала. вы должны использовать 'stdin = subprocess.PIPE' и записывать ввод в' game.stdin' – mata
@mata, вы решили мою проблему. Благодарю. Если вы напишете ответ, я приму его. –
добавлен как ответ :) – mata