Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用通过subprocess.Popen()运行的可选输入使可执行文件静音?_Python_Stream_Stdin_Io Redirection_Gams Math - Fatal编程技术网

Python 如何使用通过subprocess.Popen()运行的可选输入使可执行文件静音?

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)的
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)
仍然给出输出!