← index #18091Issue #15982
Off-topic · high · value 3.170
QUERY · ISSUE

print output redirection not working as in Python.

openby beetlegiggopened 2025-09-17updated 2025-09-19
bug

Port, board and/or hardware

raspberry pico2w

MicroPython version

MicroPython v1.26.0 on 2025-08-09; Raspberry Pi Pico 2 W with RP2350

Reproduction

# print redirection test
import sys
proper_stdout = sys.stdout       # save original
log = open('out.txt', 'w')
sys.stdout = log                 # redirect stdout            

print('hello')
print('wheres my print')

log.close()
sys.stdout = proper_stdout      # revert redirect

print('back to the future')
print('so whats in the out.txt file?')

read_log = open('out.txt', 'r')
for line in read_log:
    print(line)
read_log.close()    

Expected behaviour

The sys.stdout would be redirected to the 'log' file (out.txt) and the following print two print statement contents would be directed to the out.txt file.

Observed behaviour

Traceback (most recent call last):
File "<stdin>", line 5, in <module>
AttributeError: 'module' object has no attribute 'stdout'

line 5 is:
sys.stdout = log

Additional Information

This code snippet works as expected in Python.

Code of Conduct

Yes, I agree

CANDIDATE · ISSUE

Thread on Core 1 on PICO hangs when accessing io

openby kpg141260opened 2024-10-09updated 2025-02-04
bugport-rp2needs-info

Port, board and/or hardware

Raspberry Pi Pico

MicroPython version

MicroPython v1.23.0 on 2024-06-02; Raspberry Pi Pico with RP2040

Reproduction

import os
import time
import _thread


def core1_thread():
    try:
        print("entering core1_thread")
        text = "some text to log"
        # Open log file in append mode
        f = open("test.log", "a")
        f.write(text)
    except OSError as ex:
        print(ex)
    finally:
        f.close()


def create_log():
    """
    Check if the log file exists. If the log file does not exist, create the log file and write a header line.

    Parameters:
        None

    Returns:
        None
    """
    _log_fn = "/test.log"
    try:
        # File exists
        os.stat(_log_fn)
        return
    except OSError:
        idx = _log_fn.rfind("/")
        dir = _log_fn[1:idx]
        if dir and not dir in os.listdir():
            os.mkdir(dir)
        # File does not exist
        try:
            t = f"file {_log_fn} created\n"
            with open(_log_fn, "a") as f:
                f.write(t)
                print(t.rstrip())
        except OSError as ex:
            raise OSError(f"exception {ex}")


def main():
    create_log()
    thread = _thread.start_new_thread(core1_thread, ())

if __name__ == "__main__":
    main()
    time.sleep(1)  # if 'mpremote run', allow thread to run before we soft reset

Expected behaviour

Expected to see 'some text to log' in file test.log on pico.

Observed behaviour

After starting the thread it hangs after printing 'entering core1_thread'.

Additional Information

No, I've provided everything above.

Code of Conduct

Yes, I agree

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied