如何在PyInvoke的task任务中处理标准输入stdin?
Invoke任务读取标准输入(stdin)的实现方法
核心逻辑:Invoke没有对标准输入做特殊封装,直接使用Python内置的sys.stdin操作即可。
完整实现示例
1. 编写tasks.py文件
import sys from invoke import task @task def remove_number(c): # 读取标准输入内容 input_str = sys.stdin.read() # 过滤所有数字字符 output_str = "".join([char for char in input_str if not char.isdigit()]) # 输出处理结果(strip可按需删除首尾空白/换行) print(output_str.strip())
2. 执行验证
运行你预期的命令即可得到对应结果:
echo '11da33' | inv remove-number
输出结果为:da
常见扩展场景
- 处理大体积输入时,逐行读取降低内存占用:
@task def remove_number(c): for line in sys.stdin: processed = "".join([char for char in line if not char.isdigit()]) print(processed.strip())
- 增加无管道输入的兼容判断,避免任务卡住:
@task def remove_number(c): # 判断是否有管道输入,无输入时直接返回提示 if sys.stdin.isatty(): print("使用说明:echo '待处理内容' | inv remove-number") return input_str = sys.stdin.read() output_str = "".join([char for char in input_str if not char.isdigit()]) print(output_str.strip())
内容的提问来源于stack exchange,提问作者kharandziuk
相关产品推荐
相关产品推荐

