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

Bash环境下单次运行Python程序逐行读取txt输入并保存输出的方法

问题原因

你之前写的Bash脚本有两个核心错误:

  • 把python3 main.py写在while循环内部,每读取一行内容就会重新启动一次Python程序,完全不符合「程序仅启动一次」的要求
  • 管道用法逻辑颠倒:A | B的作用是把A命令的输出传给B命令作为输入,你写的python3 main.py | "$line"会把Python的输出传给$line对应的命令执行,根本没有把读取到的行内容传给Python作为输入,自然无法正常读取参数。

另外你当前的Python代码本身也不符合需求:现有逻辑仅会读取一组n、x参数,处理完成后就直接退出,无法处理多组输入直到碰到结束标识0,同时还存在多余输出的问题:当n≠0时f函数内部已经打印了拼接后的字符串,外层再print(f(n,x))会额外输出一行None,和预期输出格式不符。

实现步骤

第一步:修正Python代码逻辑

修改main.py,增加循环读取逻辑直到碰到结束标识0,同时去掉多余的None输出:

def f(n, x):
    return n * x

if __name__ == "__main__":
    while True:
        # 读取数字n
        n = int(input())
        # 碰到结束标识0直接退出循环
        if n == 0:
            break
        # 读取对应字符串x
        x = input()
        # 输出拼接结果
        print(f(n, x))

第二步:执行单行Bash命令完成重定向

不需要在Bash中写逐行读取的循环,直接通过标准输入、输出重定向,把输入文件传给Python,把Python输出写入结果文件即可,整个过程Python仅会启动一次:

python3 main.py < inputs.txt > output.txt
原理说明
  • < inputs.txt 表示把inputs.txt的内容作为Python进程的标准输入,Python中每次调用input()就会按顺序读取文件中的下一行内容
  • > output.txt 表示把Python进程的所有标准输出内容写入output.txt文件,不会输出到终端
  • 整个命令只启动一次Python进程,所有输入读取、多组参数处理的逻辑都在Python内部的循环中完成,完全符合需求。

内容的提问来源于stack exchange,提问作者Ali Abdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:57:16