1

我想从 python 调用一个 Fortran 程序。我使用来自子进程的 Popen 语句,如下所示:

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

然后我想将一些文件名发送到 fortran 程序。fortran 程序从标准输入读取它们,然后打开文件。如果我使用类似的东西:

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

非常感谢

4

1 回答 1

2

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

于 2011-10-07T09:49:31.690 回答