print操作及重定向

本文详细探讨了Python中的print操作,包括其工作原理、使用方式以及如何实现输出的重定向。通过实例解析,读者将掌握如何将程序输出定向到文件或其他目标,以实现更灵活的日志记录和调试目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#-*-coding:utf-8-*-
#一、py2.x/py3.0中的打印格式:
"""
py2.x:
print x,y    把对象的文本形式打印到sys.stdout,各项间添加一个空格,末尾加行末(换行)
print x,y,   同print x,y,只是末尾没有行末
print >> afile,x,y 将文本发送到afile.write而不是sys.stdout.write

py3.0:对应py2.x中的上述几种情况
print(x,y)
print(x,y,end='')
print(x,y,file=afile)
"""

#二、打印重定向的实现及原始流恢复
"""
内容将输出到log.txt文件中
"""
import sys
#sys.stdout = open("log.txt",'a')
#print "Execute ,here"
#sys.stdout.close()

"""
将系统输出流重新定位到控制台
"""
temp = sys.stdout
sys.stdout = open("log.txt",'a')
print "I am here,again!"
sys.stdout.close()

sys.stdout = temp
print "Print to console!!"

"""
系统输出流重定向后恢复的简单实现方式 print >> afile,x,y
"""
print >> open("log.txt",'a'),"This way please!"

"""
将错误信息打印到标准错误流stderr上
"""
sys.stderr.write("bad"*3+'\n')
print >>sys.stderr,"BAD"*2

#三、版本独立的打印:py2.6中使用Py3.0的打印语法
from __future__ import print_function
print("spam",1,"Hello,python!")
print("hello,python!","Hi,yinhan~",123)
print("go here!",113,file=open("log.txt","a"))
### 实现串口打印输出重定向 #### 1. 准备工作 为了能够将 `printf` 输出重定向至串口,在程序中需引入必要的头文件并配置好相应的外设。对于 STM32 设备而言,通常会涉及到标准输入输出库 `<stdio.h>` 和硬件抽象层 (HAL) 库。 ```c #include "stm32f1xx_hal.h" #include <stdio.h> ``` #### 2. 初始化 UART 外设 确保已正确初始化用于通信的 UART 接口,比如这里以 USART1 为例: ```c UART_HandleTypeDef huart1; void MX_USART1_UART_Init(void){ huart1.Instance = USART1; huart1.Init.BaudRate = 9600; // 设置波特率为9600bps huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart1); } ``` #### 3. 定义 `_write` 函数 为了让 C 标准库中的 `printf` 能够识别新的输出路径,需要覆盖掉默认的标准输出流处理逻辑。这可以通过自定义 `_write` 函数来完成,该函数负责接收来自 `printf` 的字符并将它们发送给指定的 UART 端口[^3]。 ```c int _write(int file, char *ptr, int len){ HAL_UART_Transmit(&huart1, (uint8_t *) ptr, len, HAL_MAX_DELAY); return len; } ``` 上述代码片段实现了当调用 `printf` 或其他基于标准 I/O 流的操作时,实际的数据会被传递给此 `_write` 函数执行,并最终通过 UART 发送出去。 #### 4. 使用 `printf` 进行测试 一旦完成了以上步骤,则可以直接使用 `printf` 来向连接着计算机或其他设备的串口发送消息了。例如可以编写如下简单的测试语句验证效果: ```c int main(){ /* Initialize all configured peripherals */ MX_USART1_UART_Init(); printf("Hello World!\r\n"); while(1){} } ``` 此时,“Hello World!” 就应该能够在与 MCU 相连的 PC 上打开的串口监视器里看到被成功接收到的信息了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值