Python中如何移除subprocess.Popen结果中的换行符
解决subprocess.Popen输出元素带换行符的问题
嘿,我来帮你搞定这个换行符的烦恼!你用subprocess.Popen执行命令后,readlines()返回的其实是列表哦,可能你之前误解了它的类型~ 下面给你几个实用的解决办法:
方法1:遍历列表逐个去除换行符
直接用列表推导式遍历readlines()返回的结果,对每个元素调用strip()去掉首尾的换行符和空白字符:
result = subprocess.Popen("ls -1 | sed -e 's/\..*$//'", shell=True, stdout=subprocess.PIPE) variables = [line.strip() for line in result.stdout.readlines()]
如果你的输出是字节串(Python3默认情况),可以先解码再处理:
variables = [line.decode('utf-8').strip() for line in result.stdout.readlines()]
方法2:先读取全部内容再按行分割
先把命令输出一次性读成完整字符串,再用splitlines()方法按换行分割,这个方法会自动忽略末尾的换行符:
result = subprocess.Popen("ls -1 | sed -e 's/\..*$//'", shell=True, stdout=subprocess.PIPE) output = result.stdout.read().decode('utf-8') variables = output.splitlines()
方法3:用更简洁的subprocess.check_output
subprocess.check_output()可以直接返回命令的输出结果,搭配text=True参数还能直接得到字符串类型的输出,不用手动解码:
import subprocess output = subprocess.check_output("ls -1 | sed -e 's/\..*$//'", shell=True, text=True) variables = output.splitlines()
这个方法还会自动检查命令执行是否成功,如果命令出错会抛出异常,比直接用Popen更省心。
内容的提问来源于stack exchange,提问作者Oz Giat
相关产品推荐
相关产品推荐

