Как записать в файл с помощью (или изменить) печати с помощью Python 3.x - PullRequest
0 голосов
/ 07 мая 2019

Я использую API от Interactive Brokers для получения исторических данных, а я использую их код для загрузки данных.

Код использует функцию печати для вывода данных на терминал, но я бы хотелперенаправить его в файл (давайте назовем этот файл 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.

Может ли кто-нибудь помочь мне здесь?Спасибо!

1 Ответ

1 голос
/ 07 мая 2019

в то время как, вероятно, было бы лучше сделать перенаправление вывода:

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

просто швырнуть вышеупомянутые строки кода где-нибудь высоков вашем скрипте
это , а не рекомендуемый способ, потому что он будет перезаписывать print только в текущем скрипте, а не в импортированных модулях, которые также могут печатать

Aлучше поменять stdout:

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