You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:04