Как я могу использовать подпроцессы для передачи команд в другую программу? - PullRequest
0 голосов
/ 03 июня 2019

Я написал программу, которая открывает GAP (алгебра групп и программирование) как подпроцесс и определяет четыре функции в GAP.Теперь я хочу передать команды, которые я генерирую в python, этому подпроцессу GAP, чтобы GAP оценил команды и возвратил вывод в python.

Я могу заставить GAP читать функции из файлов, но я не могу заставить его фактически читать все, что я даю ему в качестве ввода.

Я пробовал:

process.communicate(file path containing commands)
process.communicate(string of all commands)
process.stdin.write(String of a single command)
process.stdin.write(string of all commands)
GAPpath = r'C:/gap-4.10.1/bin/gap.bat'
    path = os.getcwd()
    mainpath = path.replace(os.sep, '/')
    with open((mainpath +'/deltasetsinit.g'), 'r', -1,"UTF-8") as prelimfile: # Pull functions into a single string
        prelimcode = prelimfile.read()
    with open((mainpath +'/deltasetstotest.g'), 'r', -1, "UTF-8") as deltafile: # Pull tests into single string
        dtests =  deltafile.read() # file containing all generated commands
    cmd = [GAPpath,prelimcode] # construct object containing path to GAP and the functions
   #P = subprocess.run(cmd, text=True)# spawn a new process, GAP, and pass the the function string to it.
    process = Popen(cmd, text=True, stdin=PIPE, stdout=PIPE)
    process.communicate(dtests)

Я ожидал бы, что python будет передавать любые команды, которые он генерирует, в промежуток, а затем в промежуток, чтобы затем оценивать эти команды

Вместо этого GAP запускается и определяет все необходимые функции, а затем зависает.Программа python завершает работу после чтения любой из следующих строк:

process.communicate(file path containing commands)
process.communicate(string of all commands)
process.stdin.write(String of a single command)
process.stdin.write(string of all commands)
...