如何捕获os.system命令的终端输出并在其他命令中复用?
解决os.system命令间无法共享变量的问题
你遇到的问题核心是:每个os.system调用都会启动独立的子Shell进程,进程间的环境变量、自定义变量完全隔离。第一个命令里设置的script变量只存在于它自己的Shell进程中,第二个os.system启动新Shell时,这个变量根本不存在,所以echo输出自然不符合预期。
几种可行的解决方法:
1. 把多个命令合并到同一个os.system调用里
让变量设置和echo命令在同一个Shell进程中执行,用分号分隔命令:
os.system("script='policy/policy.script'; echo [script] The policy script is \"$script\"")
执行后就能得到预期输出:[script] The policy script is 'policy/policy.script'
2. 用subprocess模块替代os.system(推荐)
subprocess是Python官方推荐替代os.system的模块,功能更灵活,还能方便捕获输出:
import subprocess # 同一Shell执行多命令 subprocess.run("script='policy/policy.script'; echo [script] The policy script is \"$script\"", shell=True) # 或者通过环境变量传递(更规范) import os my_env = os.environ.copy() my_env["script"] = "policy/policy.script" subprocess.run("echo [script] The policy script is \"$script\"", shell=True, env=my_env)
3. 导出变量为环境变量(仍需同Shell执行)
如果坚持用os.system,可以把变量导出成环境变量,但还是要和后续命令放在同一个调用里:
os.system("export script='policy/policy.script'; echo [script] The policy script is \"$script\"")
内容的提问来源于stack exchange,提问作者meet vora
相关产品推荐
相关产品推荐

