Python:在特定目录中运行shell命令

时间:2016-12-14 09:27:16

标签: python shell

我使用python脚本编译maven项目。

如果我使用

from subprocess import call
call("mvn clean && mvn compile")

我无法定义maven项目的目录,maven尝试在Python脚本目录中编译。

是否有任何标准方法可以为shell命令定义执行目录?

1 个答案:

答案 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