Python:使用子进程调用Fortran并通过通信发出命令

时间:2011-10-07 08:47:02

标签: python subprocess communicate

我想从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将这些奇怪的字符放入与子进程的通信中,更重要的是,我该如何摆脱它?

非常感谢

1 个答案:

答案 0 :(得分:2)

听起来你的Fortran可能会获得Unicode,你使用的是Python 3吗?如果是,则构造要传递的字符串,然后使用 string .encode()