我想从 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 将这些奇怪的字符放入与子进程的通信中,更重要的是,我如何摆脱这些字符?
听起来你的 Fortran 可能正在获取 Unicode,你使用的是 Python 3 吗?如果是这样,则构造要传递的字符串,然后使用 string
.encode()