Windows下Python调用PowerShell命令如何捕获输出存为字符串变量
解决方案
问题根因
os.system() 仅会返回命令的退出状态码(int类型,0代表执行成功,非0代表执行异常),命令执行产生的所有输出会直接打印到控制台,不会通过返回值传递给Python变量,因此你转换类型后拿到的只是执行状态的数字,无法得到PowerShell返回的磁盘信息。
推荐实现方案
使用Python内置的subprocess模块即可实现无弹窗执行命令+捕获输出,完整可运行代码如下:
import subprocess from subprocess import STARTUPINFO, STARTF_USESHOWWINDOW, SW_HIDE # 配置启动信息,实现运行时不弹出黑窗 startupinfo = STARTUPINFO() startupinfo.dwFlags |= STARTF_USESHOWWINDOW startupinfo.wShowWindow = SW_HIDE # 执行PowerShell命令并捕获输出 result = subprocess.run( ["powershell.exe", "-NoProfile", "-Command", "Get-PhysicalDisk"], capture_output=True, text=True, encoding="gbk", # 中文Windows系统默认编码为gbk,出现乱码可尝试改为utf-8 startupinfo=startupinfo, creationflags=subprocess.CREATE_NO_WINDOW ) # 拿到标准输出内容,就是磁盘信息字符串 windows_info = result.stdout # 写入文件 with open("hardDriveInfo.txt", "w", encoding="utf-8") as f: f.write("Hard Drive Info:\n" + windows_info) # 测试打印 print(type(windows_info)) print(windows_info)
代码说明
- 配置
STARTUPINFO和CREATE_NO_WINDOW参数,双重保证执行PowerShell时不会弹出任何黑色窗口 capture_output=True会自动捕获命令的标准输出和错误输出,分别存放在result.stdout和result.stderr中text=True直接将捕获的二进制输出转为字符串类型,不需要手动调用解码方法- 用
with语法操作文件会自动处理关闭逻辑,避免资源泄漏
内容的提问来源于stack exchange,提问作者Yomal Senarath
相关产品推荐
相关产品推荐

