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

问题描述 投票:0回答: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 将这些奇怪的字符放入与子进程的通信中,更重要的是,我如何摆脱这些字符?

python subprocess
1个回答
2
投票

听起来你的 Fortran 可能正在获取 Unicode,你使用的是 Python 3 吗?如果是这样,则构造要传递的字符串,然后使用 string

.encode()

© www.soinside.com 2019 - 2024. All rights reserved.