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