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

Ale*_*eut 3 python shell

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

如果我使用

from subprocess import call
call("mvn clean && mvn compile")
Run Code Online (Sandbox Code Playgroud)

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

是否有任何标准方法来定义shell命令的执行目录?

Jea*_*bre 8

你的命令应该使用

  • 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端输出的命令保持(不重定向到一个文件,这是肮脏的),你需要Popenstdout=PIPE替代call