Python: вызов Fortran с подпроцессом и выдача команд через связь - PullRequest
1 голос
/ 07 октября 2011

Я хочу вызвать программу на Фортране из python. Я использую оператор Popen из подпроцесса следующим образом:

p = Popen(['./finput'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)

Затем я хочу отправить некоторые имена файлов в программу fortran. Программа на Фортране читает их со стандартного ввода, а затем открывает файлы. Если я использую что-то вроде:

p_stdout = p.communicate(input='file1.dat\nfile2.dat\n')[0]

все хорошо и программа на фортране работает как положено. Однако я хочу дать имена файлов в качестве переменной из программы Python. Так что, если я использую

p_stdout = p.communicate(input=file1+'\n'+file2+'\n')[0]

моя программа на фортране не может открыть имена файлов. Проблема в том, что строка, которую читает Фортран, выглядит так

 f i l e 1 . d a t

с пустым символом в качестве первого символа и каким-то странным символом между каждым правильным символом. К сожалению, это проявляется только в том случае, если вы печатаете каждый символ строки по отдельности. Если вы просто напечатаете имя файла с

print*,file1

вы получите

file1.dat

Итак, мой вопрос: почему Python вводит эти странные символы в связь с дочерним процессом и, что более важно, как мне избавиться от?

большое спасибо

1 Ответ

2 голосов
/ 07 октября 2011

Похоже, ваш Фортран может получить Unicode, вы используете Python 3?Если это так, то создайте строку для передачи, затем используйте string .encode()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...