从打印到屏幕的数据中提取变量

时间:2017-02-15 22:16:58

标签: python

我正在处理旧代码oldCode.py基本上它会打印一些数据,比如项目1,2和3的销售。

print' 1 500'    print' 2 842'    打印' 3 734'

我想提取这些数据以便进一步处理。我知道我可以阻止python将这些信息打印到屏幕上,并通过编写将信息写入某个文件output.dat

python oldCode.py >> output.dat

但是,首先,如果首先没有在脚本中定义,我怎么能从output.dat中提取要处理的数据?我必须将处理步骤的结果写入相同的输出文件。如果没有重写整个代码(最终选项),我将如何做到这一点?

1 个答案:

答案 0 :(得分:1)

这有点像黑客攻击,但您可以通过在代码中添加类似内容来将stdout重定向到文件。

import sys

# This sets the normal system print output to a variable
# in case you need to restore it later in the script.
normal_stdout = sys.stdout

# This redirects the print output to a file.
sys.stdout = open('output.dat','w')

#do stuff

# And to change it back for new code, in case you actually want to print
sys.stdout = normal_stdout

请记住,打印到控制台的任何内容(包括Tracebacks)都将打印到文件中。您可以打开此文件并轻松阅读内部信息。

最佳做法是做两件事之一:
1)如果要添加旧代码,可以通过分配变量或附加到字典或类似对象来修改它,您可以在其他地方进行进一步处理,或者与打印语句一起使用。 2)如果您的代码引用了其他代码,请将其导入代码顶部

 import oldCode.py

并修改旧代码以返回而不是打印。要做到这一点,你可能必须对上面1)中描述的那些进行类似的更改,以便你有一些东西可以返回。要知道最佳路线,我们必须看到您的旧代码,或至少是一个精简版本。