Python 如何使用通过subprocess.Popen()运行的可选输入使可执行文件静音?
我对通用代数建模系统(gams)的Python 如何使用通过subprocess.Popen()运行的可选输入使可执行文件静音?,python,stream,stdin,io-redirection,gams-math,Python,Stream,Stdin,Io Redirection,Gams Math,我对通用代数建模系统(gams)的gams可执行文件有一个调用问题,该系统作为免费试用版提供 在我正在构建的应用程序中,我通过一个函数调用此可执行文件和其他文件,该函数通过重定向到dev/null,切换到静音输出,本质上: def系统调用(可执行文件,*args,silent=False): “”发出系统调用。 论据 --------- 可执行文件:str 要调用的可执行文件的名称。必须是中的可执行文件 PATH环境变量中列出的目录之一。 args:str列表 传递给可执行文件的参数 沉默:布尔
gams
可执行文件有一个调用问题,该系统作为免费试用版提供
在我正在构建的应用程序中,我通过一个函数调用此可执行文件和其他文件,该函数通过重定向到dev/null
,切换到静音输出,本质上:
def系统调用(可执行文件,*args,silent=False):
“”发出系统调用。
论据
---------
可执行文件:str
要调用的可执行文件的名称。必须是中的可执行文件
PATH环境变量中列出的目录之一。
args:str列表
传递给可执行文件的参数
沉默:布尔
是否应该对stdout隐藏输出(默认值:False)
退换商品
-------
ret:int
系统调用的返回代码
"""
从子流程导入Popen、PIPE、STDOUT
导入系统
如果没有提示:
process=Popen([executable,*args],stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL)
其他:
process=Popen([executable,*args],stderr=STDOUT,STDOUT=PIPE)
process.wait()#等待可执行文件完成
ret=process.returncode
回程网
虽然这对任何其他可执行文件都很有用,gams
只是不想安静,即syscall('gams',silent=True)
和syscall('gams',Problem.gms',silent=True)
仍然提供输出。
在交互式解释器中尝试这一点时,我意识到这似乎是因为gams
允许从stdin
输入
有没有办法预加载stdin以避免输出?您实际看到的是哪种输出?您使用的是什么版本的GAMS?旧版本默认情况下写入控制台(如果可用),而不是标准输出。如果您的GAMS版本不是最新的,您可以通过将参数
logOption
(请参阅)设置为3
,来更改此设置。或者,也许更好,因为您无论如何都不想要输出,所以设置logOption=0
以立即抑制输出。Popen()
接受可选的stdin=
关键字参数,您可以设置为None
@martineau-Nope,p1=subprocess.Popen(['gams',Rosenbrok.gms'],stdin=None,stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL)
仍然给出输出!