草庐IT

python - 将子进程 stderr 重定向到 stdout

我想将子进程的标准错误输出重定向到标准输出。常数STDOUT应该这样做,不是吗?然而,$python>/dev/null-c'importsubprocess;\subprocess.call(["ls","/404"],stderr=subprocess.STDOUT)'确实输出了一些东西。为什么会这样,我如何在标准输出上得到错误信息? 最佳答案 在Python仔细阅读sourcecode给出了答案。特别是documentation当它说:subprocess.STDOUTSpecialvaluethat(...)indicate

python - 运行包含管道的命令行并将结果显示到 STDOUT

如何从Python调用包含管道的shell命令并捕获输出?假设命令类似于:catfile.log|tail-1Perl相当于我正在尝试做的事情是这样的:my$string=`catfile.log|tail-1`; 最佳答案 使用subprocess.PIPE,如子流程文档部分"Replacingshellpipeline"中所述:importsubprocessp1=subprocess.Popen(["cat","file.log"],stdout=subprocess.PIPE)p2=subprocess.Popen(["ta

Python 3 TypeError : must be str, not bytes with sys.stdout.write()

我正在寻找一种从python脚本运行外部进程并在执行期间打印其标准输出消息的方法。下面的代码有效,但在运行时不打印标准输出。当它退出时,我收到以下错误:sys.stdout.write(nextline)TypeError:mustbestr,notbytesp=subprocess.Popen(["demo.exe"],stdout=subprocess.PIPE,stderr=subprocess.PIPE)#PollprocessfornewoutputuntilfinishedwhileTrue:nextline=p.stdout.readline()ifnextline=='

python - 从程序内部的Python(如Python -U中)未封闭的Stdout

这个问题在这里已经有了答案:Disableoutputbuffering(16个答案)封闭7个月前。是否有任何方法可以从我的代码中获取python-u的效果?如果失败,我的程序是否可以在-U模式下检查它是否运行,并在错误消息中退出吗?这是在Linux上(Ubuntu8.10服务器)。 最佳答案 我能想到的最好的:>>>importos>>>importsys>>>unbuffered=os.fdopen(sys.stdout.fileno(),'w',0)>>>unbuffered.write('test')test>>>>>>sy

python - 如何很好地处理 `with open(...)` 和 `sys.stdout`?

通常我需要将数据输出到文件,或者,如果未指定文件,则输出到标准输出。我使用以下代码段:iftarget:withopen(target,'w')ash:h.write(content)else:sys.stdout.write(content)我想重写它并统一处理两个目标。理想情况下应该是:withopen(target,'w')ash:h.write(content)但这不会很好,因为离开withblock时sys.stdout已关闭,我不希望那样。我也不想stdout=open(target,'w')...因为我需要记住恢复原始标准输出。相关:Redirectstdouttoafi

python - 在python中将stdout重定向到 "nothing"

我有一个由足够多的模块组成的大型项目,每个模块都会向标准输出打印一些内容。现在随着项目规模的扩大,没有大的。print语句在标准输出上打印了很多,这使得程序相当慢。所以,我现在想在runtime决定是否将任何内容打印到标准输出。我无法对模块进行更改,因为它们有很多。(我知道我可以将标准输出重定向到一个文件,但即使这样也相当慢。)所以我的问题是如何将标准输出重定向到无,即如何使print语句什么都不做?#Iwanttodosomethinglikethis.sys.stdout=None#thisobviouslywillgiveanerrorasNonetypeobjectdoesno

c++ - 将 cout 和 stdout 都重定向到 C++ 中的字符串以进行单元测试

我正致力于在单元测试中获取一些遗留代码,有时感知现有程序行为的唯一方法是从控制台输出。我在网上看到很多关于如何将标准输出重定向到C++中的另一个文件的示例,但是有没有办法可以将它重定向到内存中的流,这样我的测试就不必依赖磁盘了?我想将遗留代码发送到stdout的任何内容放入std::string中,以便我可以轻松地.find输出。编辑遗留代码太糟糕了,它使用了cout的混合体和printf.这是我目前所拥有的:voidTestSuite::setUp(void){oldStdoutBuf=std::cout.rdbuf();std::cout.rdbuf(consoleOutput.r

c++ - 将 stdout/stderr 重定向到字符串

之前有很多关于将stdout/stderr重定向到文件的问题。有没有办法将stdout/stderr重定向到字符串? 最佳答案 是的,您可以将其重定向到std::stringstream:std::stringstreambuffer;std::streambuf*old=std::cout.rdbuf(buffer.rdbuf());std::cout你可以使用一个简单的保护类来确保缓冲区总是被重置:structcout_redirect{cout_redirect(std::streambuf*new_buffer):old(s

go - 惯用缓冲区 os.Stdout

os.Stdout.Write()是无缓冲写入。要获得缓冲写入,可以使用以下方法:f:=bufio.NewWriter(os.Stdout)f.Write(b)问题:有没有更惯用的方法来获得缓冲输出? 最佳答案 不,这是缓冲写入Stdout的最惯用方式。在许多情况下,您还需要添加延迟:f:=bufio.NewWriter(os.Stdout)deferf.Flush()f.Write(b)这将确保在您从函数返回时刷新缓冲区。 关于go-惯用缓冲区os.Stdout,我们在StackOve

go - 重定向Go中子进程的stdout管道

我正在用Go编写一个程序,它执行类似服务器的程序(也是Go)。现在我想在我启动父程序的终端窗口中拥有子程序的标准输出。一种方法是使用cmd.Output()函数,但这仅在进程退出后打印标准输出。(这是一个问题,因为这个类似服务器的程序运行了很长时间,我想读取日志输出)变量out属于typeio.ReadCloser而且我不知道应该用它做什么来完成我的任务,而且我在网上找不到任何关于这个主题的有用信息。funcmain(){cmd:=exec.Command("/path/to/my/child/program")out,err:=cmd.StdoutPipe()iferr!=nil{f