Как предоставить ввод для программы (fortran), запущенной с помощью os.system() или другой функции python?

Я создаю скрипт python, который несколько раз запускает код fortran, используя разные входные значения. Я попытался запустить код fortran, используя: os.system('./fortrancode'). Однако затем код fortran запрашивает новый пользовательский ввод. Это должно быть предоставлено в нескольких строках (несколько операторов чтения в коде fortran) в следующем формате:

[запустить код фортрана]

filename_input.txt [нажмите ввод]

filename_output.txt [нажмите ввод]

1 [нажмите ввод]

1 [нажмите ввод]

1 40 [нажмите ввод]

-10 [нажмите ввод]

На данный момент я не могу предоставить код fortran с этими входными параметрами из моего скрипта Python. (Возможно, потому что os.system() ожидает, пока терминал выполнит вывод?) Я также пытался сделать os.system('./fortrancode\nfilename_input.txt\nfilename_output.txt\n1\n1\n1 40\n-180\n'), но это тоже не сработало.

Каким будет правильный способ предоставить коду фортрана входные параметры, которые я перебираю в скрипте python?


person Elbenstein    schedule 11.09.2020    source источник
comment
У вас есть два варианта: использовать subprocess.Popen и связываться с каналами, или, если что-то становится сложным, использовать pexpect pexpect. readthedocs.io/en/stable для вашего случая должно хватить Popen с каналами   -  person geckos    schedule 11.09.2020


Ответы (1)


Решение 1:

import subprocess 
result = subprocess.Popen(['./fortrancode', 'filename_input.txt','filename_output.txt','1', '1', '1', '40', '-180'])

Решение 2:

Вы можете звонить из Python, используя F2PY.

person Poorna Prudhvi    schedule 11.09.2020