为什么os.popen执行shell命令后read()返回结果会带有换行符
尾部出现换行符的根本原因
- 首先是Shell命令本身的输出特性
符合POSIX规范的Unix/Linux系统中,ls、head这类文本输出命令,默认会在输出结果的末尾追加\n作为行结束标记。你执行的ls -t testfile.txt |head -n1命令的输出本身就自带了这个换行符,不是Python额外添加的。 - 其次是
os.popen.read()的读取逻辑os.popen会启动独立的子进程执行你传入的Shell语句,read()方法会完整读取子进程标准输出的所有内容,不会主动过滤任何字符,自然就把命令输出末尾的换行符也读到了fileName变量中。
更推荐的处理方案
使用replace('\n', '')存在风险:Unix系统允许文件名本身包含换行符,全量替换会修改文件名的原始内容。更合理的做法是仅移除字符串末尾的换行符:
fileName = os.popen('ls -t testfile.txt | head -n1').read().rstrip('\n')
内容的提问来源于stack exchange,提问作者Jagan
相关产品推荐
相关产品推荐

