我使用python脚本编译maven项目.
如果我使用
from subprocess import call
call("mvn clean && mvn compile")
Run Code Online (Sandbox Code Playgroud)
我无法定义我的maven项目的目录,maven尝试在Python脚本的目录中编译.
是否有任何标准方法来定义shell命令的执行目录?
你的命令应该使用
shell=True
因为它使用了由退出条件测试链接的2个命令cwd=your_directory
像这样:
from subprocess import call
status = call("mvn clean && mvn compile",cwd="/users/foo/xxx",shell=True)
Run Code Online (Sandbox Code Playgroud)
我个人倾向于避免依赖shell=True
.在这些情况下,我倾向于分解两个命令并将参数直接作为参数列表,因此如果其中一些令人讨厌的空白单据被自动引用:
if call(["mvn","clean"],cwd="/users/foo/xxx") == 0:
status = call(["mvn","compile"],cwd="/users/foo/xxx")
Run Code Online (Sandbox Code Playgroud)
需要注意的是,如果你想从Python端输出的命令保持(不重定向到一个文件,这是肮脏的),你需要Popen
用stdout=PIPE
替代call