将ipython脚本的输出重定向到csv或文本文件,如sqlplus spool

时间:2016-10-13 20:02:21

标签: python ipython

我尝试将脚本的输出重定向到文件。 我不想做像

这样的事情
python myscript.py > xy.out

因为很多变量都存储在我的i​​python环境中,我喜欢把它带过来。

我尝试按照此链接

IPython: redirecting output of a Python script to a file (like bash >)

然而,当我尝试

with redirect_output("my_output.txt"):
    %run my_script.py

它给出错误

---> 10         self.sys_stdout = sys.stdout
NameError: global name 'sys' is not defined

有一个类似的解决方案可以将ipython shell的输出复制到文件中,但它说我的单元格未定义

https://www.quora.com/How-do-I-export-the-output-of-the-IPython-command-to-a-text-file-or-a-CSV-file

是否有一种更简单的方法或使用ipython构建功能? e.g。

在oracle sqlplus中有一个假脱机命令 e.g。

spool /tmp/abc
select * from table_x;
spool off

现在sql语句输出在/ tmp / abc

这是ipython的等价物吗?

2 个答案:

答案 0 :(得分:0)

问候语。我最终使用了这个解决方案:

import {noView} from 'aurelia-framework';

@noView
export class MyClass{
}

它不是很方便,但它有效!

答案 1 :(得分:0)

import time
from threading import Thread
import sys
#write the stdout to file
def log():
    #for stop the thread
    global run
    while (run):
        try:
            global out
            text = str(sys.stdout.getvalue())
            with open("out.txt", 'w') as f:
                f.write(text)
        finally:
            time.sleep(1)
%%capture out
run = True
print("start")
process = Thread(target=log, args=[]).start()

# do some work
for i in range(10, 1000):
    print(i)
    time.sleep(1)
run= False
process.join()