如何在subprocess中执行多命令时仅将ls结果存入变量x?
解决方法
有两种常见的实现方式,可根据你的实际需求选择:
方式一:重定向第二个命令的输出(同shell会话执行)
如果需要在同一个shell会话中执行两个命令,可通过重定向将pwd的输出丢弃,仅保留ls的结果:
import subprocess # 将pwd的输出重定向到/dev/null,仅保留ls的输出 cmd = "ls; pwd > /dev/null" # 捕获stdout,text=True将字节流转为字符串,strip()去除首尾空白 x = subprocess.run(cmd, shell=True, capture_output=True, text=True).stdout.strip()
方式二:分开执行两个命令(更安全,推荐)
如果两个命令没有依赖关系(比如不需要共享shell环境),分开执行可以避免shell=True带来的安全风险(比如命令注入),更稳妥:
import subprocess # 执行ls并捕获结果 x = subprocess.run(["ls"], capture_output=True, text=True).stdout.strip() # 执行pwd,无需捕获结果 subprocess.run(["pwd"])
补充说明
capture_output=True等价于同时设置stdout=subprocess.PIPE和stderr=subprocess.PIPE,用于捕获命令的输出。text=True(Python 3.7+支持)让返回的stdout是字符串类型,无需手动解码。- 如果需要忽略
ls的错误输出,可以添加stderr=subprocess.DEVNULL。
内容的提问来源于stack exchange,提问作者eulinean
相关产品推荐
相关产品推荐

