如何使用Python3.x使用(或更改)print写入文件

如何使用Python3.x使用(或更改)print写入文件,python,python-3.x,visual-studio,pycharm,interactive-brokers,Python,Python 3.x,Visual Studio,Pycharm,Interactive Brokers,我使用一个来自交互式代理的API来获取历史数据,我使用他们的代码来下载数据 代码使用打印功能将数据输出到终端,但我想将其重定向到一个文件(让我们调用该文件StockData.txt) 我使用的代码是: from ibapi.client import EClient from ibapi.wrapper import EWrapper from ibapi.contract import Contract class TestApp(EWrapper, EClient): def __

我使用一个来自交互式代理的API来获取历史数据,我使用他们的代码来下载数据

代码使用打印功能将数据输出到终端,但我想将其重定向到一个文件(让我们调用该文件StockData.txt)

我使用的代码是:

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract

class TestApp(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)

    def error(self, reqId, errorCode, errorString):
        print("error: ", reqId, " ", errorCode, " ", errorString)

    def historicalData(self, reqId, bar):
        print("HistoricalData. ", reqId, " Date:", bar.date, "Open:", bar.open, "High:", bar.high, "Low:", bar.low, "Close:", bar.close, "Volume:", bar.volume)

def main():
    app = TestApp()

    app.connect("127.0.0.1", 7497, 0)

    contract = Contract ()
    contract.symbol = "AAPL"
    contract.secType = "STK"
    contract.exchange = "SMART"
    contract.currency = "USD"
    contract.primaryExchange = "NASDAQ"

    app.reqHistoricalData(0, contract, "", "1 D", "1 min", "TRADES", 0, 1, False, [])

    app.run()

if __name__ == "__main__":
    main()
正如我所说,我希望API能够写入StockData.txt,但我不确定如何做到这一点,因为这不是我的代码,我对Python也不是那么精通

有人能帮我吗?
谢谢

虽然执行输出重定向可能会更好:

python my_script.py > outputfile.txt
实际上覆盖任何函数都非常简单:

def print_to_file(*args):
    with open('text.txt', 'a') as fh:
        fh.write(' '.join(map(str,args)))
print = print_to_file
只需将上述代码行塞进脚本中较高的位置
不过,这不是推荐的方法,因为它只会覆盖当前脚本中的
打印
,而不会覆盖导入的模块(也可能正在打印)

更好的方法是更改
stdout

import sys
sys.stdout = open('text.txt', 'a')

为什么不使用标准操作系统输出重定向而不是修改脚本?关于如何在windows上实现这一点,请检查以下问题:Hi-GPhilo,我不确定你的意思是什么。请你澄清一下好吗?谢谢你的回复,但是我不能用这个表格来解决我的问题。也许更多关于你为什么不能的信息可以帮助我们解决这个问题。你能用clrify吗?你发送的链接不是关于打印或书写,而是用一行代码重定向某些东西。我不认为我可以使用codeFirst选项(覆盖打印)仅适用于当前脚本中的打印:如果任何导入的模块写入终端,则该部分不会写入文件。正确的方法(除了重定向)是更改
stdout