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
相关产品推荐
相关产品推荐

