标准写入()被阻止与箔材.ex

2024-04-27 23:36:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为Xfoil编写一个包装器,我的第一个命令集是:

commands=[]

commands.append('plop\n')
commands.append('g,f\n')
commands.append('\n')
commands.append('load '+ afile+'\n')
commands.append('\n')
#commands.append('ppar\n');
#commands.append('n %g\n',n);
commands.append('\n')
commands.append('\n')
commands.append('oper\n')
commands.append('iter '+ str(iter) + '\n')
commands.append('visc {0:f}\n'.format(Re))
commands.append('m {0:f}\n'.format(M))

我与xfoil的互动如下:

^{pr2}$

但是,Xfoil.stdin.write公司正在被阻止与程序交互--xfoil.exe文件--作为Xfoil.stdin.write公司(i) 返回一个None。在

在第一个命令(即plop

我如何解决这个问题?在


Tags: formatstdinload公司commandswriteiter命令集
2条回答

要发送多个命令,可以use ^{} method发送命令、关闭管道并等待子进程完成:

import os
from subprocess import Popen, PIPE

process = Popen(os.path.abspath('xfoil.exe'), stdin=PIPE)
process.communicate(b"".join(commands))

^{cd2>}在代码中等待可执行文件在第一个命令之后完成。关闭管道(^{cd3>})表示EOF,否则,如果^{{cd4>}读取,则可能会发生死锁,直到EOF(否则没有命令使其退出)。

解决方法是增加Xfoil.stdin.关闭();关闭缓冲区允许程序继续。在

Xfoil = Popen(xfoil_path, shell=True, stdin=PIPE, stdout=None, stderr=None, creationflags=0)
for i in commands:
    Xfoil.stdin.write(i)

Xfoil.stdin.close()
Xfoil.wait()

寻求帮助了解原因Xfoil.stdin.关闭需要添加()。如何关闭缓冲区xfoil.exe文件继续吗?在

相关问题 更多 >