2011-05-01 58 views
1

我正在尝试创建一个scipr,它可以在stdout或文件中写入。是否有可能通过相同的代码片段写入每个文件,而不是使用stdou和io.write()打印文件?两者是否有可能通过Python中的常规打开/写入来访问stdout

例子:

out_file = open("test.txt", "wt") 
out_file.write("Text") 
out_file.close() 

print("Text", file=sys.stdout) 
+2

您可以传递任何类似文件的对象作为print的文件参数,这有什么问题? – 2011-05-01 19:01:23

+0

hwo可以通过字符串传递吗?当以字符串存储sys.stdout /文件时,它将写入AttributeError:'str'对象没有属性'write'。不知道如何将其转换为类似文件的对象 – Blackie123 2011-05-01 19:07:04

+0

当然,您需要先打开它。行为取决于模式:http://docs.python.org/py3k/library/functions.html#open – 2011-05-01 19:07:13

回答

1

这是你想要的吗?

from __future__ import print_function, with_statement 
def my_print(text, output): 
    if type(output) == str: 
     with open(output, 'w') as output_file: 
      print(text, file=output_file) 
    elif type(output) == file: 
     print(text, file=output) 
    else: 
     raise IOError 

我想我明白,也许这:

from __future__ import print_function, with_statement 
def my_print(text, output): 
    if type(output) == str: 
     try: 
      output_file = eval(output) 
      assert type(output_file) == file 
     except (NameError, AssertionError): 
      output_file = open(output, 'w') 
     print(text, file=output_file) 
     output_file.close() 
    elif type(output) == file: 
     print(text, file=output) 
    else: 
     raise IOError 

有了这个,你可以把这个字符串“sys.stdout的”的功能和它会首先尝试把它作为一个文件(从系统或以前打开),如果它引发一个NameError,它将其作为一个新文件打开它

相关问题