【发布时间】:2012-01-21 23:12:53
【问题描述】:
我正在处理的 java 项目有一个 .bat 文件和一个 .sh 文件,它们构建了 CLASSPATH 以供项目运行。 (.bat 用于 Windows,.sh 用于其余)。
现在,我正在编写一个 python 脚本,它需要访问由这些脚本创建的类路径,如果在 linux 上来自 .sh,如果在 windows 上来自 .bat。
目前,我正在为 linux 做这个:
Popen(['bash', '-c', '. mkcp.sh && echo $CLASSPATH'], stdout=sp.PIPE).communicate()[0].strip()
我想不出在 Windows 上执行此操作的等效方法。到目前为止,我已经想出了这个
check_output(['cmd', '/c', 'call mkcp.bat && echo %CLASSPATH%'])
但这会将mkcp.bat 文件中的所有命令放入标准输出。 (将@echo off 添加到该文件对我来说不是一个选项,即我无法修改它)。抛开这个问题不谈,主要问题是%CLASSPATH% 在运行批处理文件之前被替换为它的值,这不是我想要的。
我想到的另一种方法是,如果我像上面那样创建一个Popen 对象并运行批处理文件,如果我可以访问该进程的环境,我就能得到我想要的。但从 Popen 的文档来看,这似乎是不可能的。
关于如何实现这一点的任何想法?
【问题讨论】:
标签: python batch-file subprocess cmd