如何从python子例程捕获stdio?

如何从python子例程捕获stdio?,python,io,Python,Io,我有以下代码: def fsub(): print 'OK' def fmain(): a = fsub() fmain() 显然,fsub()不会返回'OK'并在fmain()中分配给a。然而,这正是我想要的。我们是否可以在不更改的情况下使其fsub()?当您执行a=fsub()时,您试图将a赋值为fsub()的返回,在这种情况下无(因为fsub()不返回任何内容) 正确的做法是将标准输出重定向到一个文件,然后调用fsub()函数,然后将标准输出重定向回原始标准输出: impor

我有以下代码:

def fsub():
  print 'OK'

def fmain():
  a = fsub()

fmain()
显然,
fsub()
不会返回'OK'并在
fmain()
中分配给
a
。然而,这正是我想要的。我们是否可以在不更改的情况下使其
fsub()

当您执行
a=fsub()
时,您试图将
a
赋值为
fsub()
的返回,在这种情况下
(因为
fsub()
不返回任何内容)

正确的做法是将标准输出重定向到一个文件,然后调用
fsub()
函数,然后将标准输出重定向回原始标准输出:

import sys

def fmain():
    sys.stdout = open('output','a')
    fsub()
    sys.stdout = sys.__stdout__
    print 'Output of fsub():'
    print open('output').read(),
    # added the coma (,) to avoid a new line
结果:

>>> fmain()
Output of fsub():
OK
当您执行
a=fsub()
操作时,您试图将
a
赋值为
fsub()
的返回值,在本例中为
None
(因为
fsub()
不返回任何内容)

正确的做法是将标准输出重定向到一个文件,然后调用
fsub()
函数,然后将标准输出重定向回原始标准输出:

import sys

def fmain():
    sys.stdout = open('output','a')
    fsub()
    sys.stdout = sys.__stdout__
    print 'Output of fsub():'
    print open('output').read(),
    # added the coma (,) to avoid a new line
结果:

>>> fmain()
Output of fsub():
OK

你应该回去接受我们一些问题最相关的答案。@HailiangZhang,通常在问完问题后,点击复选符号,你会接受最好的答案。你的10个问题都没有这样做过,甚至一次也没有。你应该回去接受我们一些问题最相关的答案。@HailiangZhang,通常在提问后,点击复选标记接受最佳答案。对于你的10个问题,你一次也没有这样做。对不起,我需要重新表述我的问题。请再次查看原始问题…我需要从fsub中获取打印输出fmain@HailiangZhang,编辑我的帖子我建议使用
StringIO
对象而不是文件。对不起,我需要重新表述我的问题。请再次查看原始问题…我需要从fsub中获取打印输出fmain@HailiangZhang,编辑我的帖子我建议使用
StringIO
对象而不是文件。