Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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 如何防止os.popen返回输出?_Python - Fatal编程技术网

Python 如何防止os.popen返回输出?

Python 如何防止os.popen返回输出?,python,Python,我正在通过os.popen向cmd编写一个命令,但是这个命令的结果是我不感兴趣的无休止的“垃圾”。我只需要运行命令,我不想要任何东西回来 PS:接受使用os.system或子流程模块的任何其他解决方案。但是请记住,该命令将使cmd终端永远处于繁忙状态,这是无止境的。我只想从我的主程序运行它,然后转到我的其他东西,而不是等待输出,我不想一开始就看到输出 编辑:人们要求实际代码: os.popen(f'tensorboard --logdir="{path + logdir}" --host loc

我正在通过os.popen向cmd编写一个命令,但是这个命令的结果是我不感兴趣的无休止的“垃圾”。我只需要运行命令,我不想要任何东西回来

PS:接受使用os.system或子流程模块的任何其他解决方案。但是请记住,该命令将使cmd终端永远处于繁忙状态,这是无止境的。我只想从我的主程序运行它,然后转到我的其他东西,而不是等待输出,我不想一开始就看到输出

编辑:人们要求实际代码:

os.popen(f'tensorboard --logdir="{path + logdir}" --host localhost --port {pn}', 'w')
上面的函数
runCmd
将运行命令cmd,这是一个参数数组


上面的函数
runCmd
将运行一个命令cmd和一组参数。

这是一个有趣的函数,它将使用给定的
args
kwargs
执行您给它的任何其他函数,并将在运行所述函数之前关闭标准输出和标准错误,然后再打开它们

def call_quiet(func, *args, **kwargs):
    with open(os.devnull, 'w') as devnull:
        sys.stdout, sys.stderr = devnull, devnull
        try:
            return func(*args, **kwargs)
        finally:
            sys.stdout, sys.stderr = sys.__stdout__, sys.__stderr__
用法示例:

call_quiet(os.popen, f'tensorboard --logdir="{path + logdir}" --host localhost --port {pn}', 'w')

这是一个有趣的函数,它将使用给定的
args
kwargs
执行您给它的任何其他函数,并将在运行所述函数之前关闭标准输出和标准错误,然后再打开它们

def call_quiet(func, *args, **kwargs):
    with open(os.devnull, 'w') as devnull:
        sys.stdout, sys.stderr = devnull, devnull
        try:
            return func(*args, **kwargs)
        finally:
            sys.stdout, sys.stderr = sys.__stdout__, sys.__stderr__
用法示例:

call_quiet(os.popen, f'tensorboard --logdir="{path + logdir}" --host localhost --port {pn}', 'w')

与@green_斗篷_guy的回答类似,您可以使用较少的模板为您管理交换:

[编辑:同时添加重定向。\u stderr。不确定是否有更好的方法将两者捆绑在一起]

import contextlib
import os

with contextlib.redirect_stdout(open(os.devnull, 'w')):
    with contextlib.redirect_stderr(open(os.devnull, 'w')):
        os.popen('...')

与@green_斗篷_guy的回答类似,您可以使用较少的模板为您管理交换:

[编辑:同时添加重定向。\u stderr。不确定是否有更好的方法将两者捆绑在一起]

import contextlib
import os

with contextlib.redirect_stdout(open(os.devnull, 'w')):
    with contextlib.redirect_stderr(open(os.devnull, 'w')):
        os.popen('...')


它是否返回类似这样的内容
?它如何将输出返回到脚本?如果它返回了什么,就不要打印结果。@0xPrateek yes!请显示您的实际代码如果您使用
w
模式,这意味着您可以写入对象,并且它将成为命令的输入。命令的任何输出都将写入终端。它是否返回类似于此的内容?它如何将输出返回到脚本?如果它返回了什么,就不要打印结果。@0xPrateek yes!请显示您的实际代码如果您使用
w
模式,这意味着您可以写入对象,并且它将成为命令的输入。命令的任何输出都将写入终端。不,这非常糟糕。它强制我的主程序等待输出。输出是无止境的,我只想运行它并继续我的其他东西,而不是等待无止境的输出。我刚试过。@Green,伙计,不是,不是。请阅读我对他的回答的评论。@GreenDoveGuy你是什么意思?我现在用'stdout=subprocess.DEVNULL'打开,但没有创建任何输出。@Alex Deft:我不应该如此冒昧地回答GreenDoveGuy,但我相信他的意思是,如果你不想等待无休止的输出,您可以在另一个线程或进程中运行该工作,然后在主线程中继续执行其他工作。即使您抑制所有输出,您正在运行的命令仍将尝试生成输出,并且您不一定会显著减少运行时间。不,这非常糟糕。它强制我的主程序等待输出。输出是无止境的,我只想运行它并继续我的其他东西,而不是等待无止境的输出。我刚试过。@Green,伙计,不是,不是。请阅读我对他的回答的评论。@GreenDoveGuy你是什么意思?我现在用'stdout=subprocess.DEVNULL'打开,但没有创建任何输出。@Alex Deft:我不应该如此冒昧地回答GreenDoveGuy,但我相信他的意思是,如果你不想等待无休止的输出,您可以在另一个线程或进程中运行该工作,然后在主线程中继续执行其他工作。即使您抑制所有输出,您正在运行的命令仍将尝试生成输出,并且您不一定会显著减少运行时间。我尝试过。它可以工作,但是,同样的事情,它会返回大量类似这样的内容:I0625 07:37:20.008877 13116_internal.py:122]127.0.0.1---[25/Jun/2019 07:37:20]“GET/data/experiments HTTP/1.1”200-如果是那种类型的输出,实际上可能无法通过python抑制它-子进程可能只是以某种方式访问系统stdout。既然您使用的是子进程/popen,那么您是否调查过可能存在的
--quiet
命令行选项或类似选项?这似乎是一个很有希望的解决方案。我做了一些搜索,但它远远超过我的头。我做到了!我将这两个标志添加到命令>nul 2>&1的末尾。他们永远压制产量。非常感谢。这是解决办法,我试过了。它可以工作,但是,同样的事情,它会返回大量类似这样的内容:I0625 07:37:20.008877 13116_internal.py:122]127.0.0.1---[25/Jun/2019 07:37:20]“GET/data/experiments HTTP/1.1”200-如果是那种类型的输出,实际上可能无法通过python抑制它-子进程可能只是以某种方式访问系统stdout。既然您使用的是子进程/popen,那么您是否调查过可能存在的
--quiet
命令行选项或类似选项?这似乎是一个很有希望的解决方案。我做了一些搜索,但它远远超过我的头。我做到了!我将这两个标志添加到命令>nul 2>&1的末尾。他们永远压制产量。非常感谢。Genuis解决方案。它是有效的,但是,同样的,成吨的垃圾显示如下:I0625 07:40:44.454461 12164_internal.py:122]127.0.0.1---[25/Jun/2019 07:40:44]“GET/data/runs HTTP/1.1”200-I0625 07:40:44.459447 20224_internal.py:122]127.0.1---[25/Jun/2019 07:40:44]“GET/data/experiments HTTP/1.1”200-尝试添加一个
重定向\u stderr
块。将注释更新为incl