我想从python调用Fortran程序。我使用子进程中的Popen语句,如下所示:
p = Popen(['./finput'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
然后我想将一些文件名发送到fortran程序。 fortran程序从stdin读取它们然后打开文件。 如果我使用类似的东西:
p_stdout = p.communicate(input='file1.dat\nfile2.dat\n')[0]
一切都很好,fortran程序按预期工作。 但是我想在python程序中将文件名作为变量。 所以,如果我使用
p_stdout = p.communicate(input=file1+'\n'+file2+'\n')[0]
我的fortran程序无法打开文件名。问题是fortran读取的字符串看起来像这样
f i l e 1 . d a t
空白字符作为第一个字符,每个正确字符之间有一些奇怪的字符。不幸的是,只有在单独打印字符串的每个字符时才显示。如果您只是用
打印文件名print*,file1
你得到了
file1.dat
所以我的问题是,为什么python将这些奇怪的字符放入与子进程的通信中,更重要的是,我该如何摆脱它?
非常感谢答案 0 :(得分:2)
听起来你的Fortran可能会获得Unicode,你使用的是Python 3吗?如果是,则构造要传递的字符串,然后使用 string .encode()