如何将Python中os.system调用的标准输出存储到变量中
解决方案
你可以使用Python标准库的subprocess模块替代os.system实现命令输出捕获,os.system仅能返回命令执行的退出状态码,无法捕获标准输出/错误输出内容。
具体修改步骤:
- 导入
subprocess模块(Python自带,无需额外安装) - 替换原有
os.system相关逻辑,同时修复原代码的异常捕获逻辑问题 - 将捕获到的输出作为函数返回值,赋值给对应变量即可统一打印
修改后完整代码示例:
import os import subprocess from colorama import Fore # 保留你原有代码的colorama导入 website = input(Fore.GREEN + "enter url/website for this scan: ") ops = input(Fore.GREEN + "enter other operators for xxstrike here (with spaces): ") def xssstrike(): try: # 直接用cwd参数指定执行目录,不需要手动切换工作目录 result = subprocess.run( f"python3 xsstrike.py {ops} -u {website}", shell=True, cwd="/mnt/usb/xss-strike", capture_output=True, text=True # 自动把返回的字节内容转成字符串,无需手动解码 ) # 合并标准输出和错误输出,避免遗漏报错信息 full_output = result.stdout + result.stderr return full_output except Exception as e: return f"oops! there was an error with xss strike: {str(e)}" # 调用函数获取输出结果 xssstrikeoutput = xssstrike() # 按你需要的格式统一打印 print("<><><> xss strike output results <><><>") print(xssstrikeoutput)
补充说明:
capture_output=True参数会同时捕获命令的正常打印内容和运行报错内容- 如果你使用的Python版本低于3.7,把
text=True替换为universal_newlines=True即可兼容 - 原代码中
raise print(xxx)的写法存在语法问题,print()返回None,执行时会抛出额外的类型错误,此处直接将错误信息作为返回值返回即可
内容的提问来源于stack exchange,提问作者Kuro
相关产品推荐
相关产品推荐

