سؤال

I want to call a Fortran program from python. I use the Popen statement from subprocess like this:

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

I then want to send some file names to the fortran program. The fortran program reads them from stdin and then opens the files. If I use something like:

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

everything is fine and the fortran program works as expected. However I want to give the file names as a variable from within the python program. So if I use

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

my fortran program can not open the file names. The problem is that the string that fortran reads looks like this

 f i l e 1 . d a t

with a blank character as a first character and some strange character inbetween every correct character. Unfortunately this only shows up if you print every character of the string individually. If you just print the file name with

print*,file1

you get

file1.dat

So my question is, why is python putting in these strange characters into the communication with the child process and, more important, how do I get rid of the?

many thanks

هل كانت مفيدة؟

المحلول

Sounds like your Fortran might be getting Unicode, are you using Python 3? If so, then construct the string to be passed then use string.encode()

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top