从Python打包/部署Maven



重要的是,我正在尝试自动化使用maven构建并部署到web逻辑服务器的部署过程。小图片是,我正在使用子流程来查看是否可以从python中调用maven。当我尝试此子流程时,会将mvn错误为文件。这是我到目前为止的代码:

import subprocess

def main():
print(subprocess.check_output(["mvn", "-v"]))

if __name__ == '__main__':
main()

这是我的错误:

C:pythondevpython.exe "C:/pythondev/development/deployment scripts/redploy-to-localhost.py"
Traceback (most recent call last):
File "C:/pythondev/development/deployment scripts/redploy-to-localhost.py", line 9, in <module>
main()
File "C:/pythondev/development/deployment scripts/redploy-to-localhost.py", line 5, in main
subprocess.check_output(["a"])
File "C:pythondevlibsubprocess.py", line 376, in check_output
**kwargs).stdout
File "C:pythondevlibsubprocess.py", line 453, in run
with Popen(*popenargs, **kwargs) as process:
File "C:pythondevlibsubprocess.py", line 756, in __init__
restore_signals, start_new_session)
File "C:pythondevlibsubprocess.py", line 1155, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
Process finished with exit code 1

尽管我的问题是子流程,但我愿意接受提出更好替代方案的答案。

我遇到了同样的问题,并坚持使用shell=True,因为互联网告诉我这是邪恶的。

当我在cmd.exe中运行where mvn时,我可以看到有两个匹配项:

  • mvn是一个Unix shell脚本(它以#!/bin/sh开头(
  • mvn.cmd,它是一个Windows批处理文件

我认为在cmd.exe中执行mvn something -something时会发生以下情况:Windows尝试找到一个名为mvn的可执行文件。它找到了mvn文件,但意识到该文件是不可执行的。然后,它尝试查找mvn.commvn.exe等文件。。。(请参阅%PATHEXT%系统变量(。当它找到mvn.cmd时,它执行它,每个人都很高兴。

据我所知,subprocess.check_output(和subprocess.run,等等(的问题是没有执行通过%PATHEXT%的路径"扩展"。因此,解决方案是,您必须手动提供扩展,并以的身份运行您的命令

print(subprocess.check_output(["mvn.cmd", "-v"]))

试试这个,它对我有效。

print(subprocess.check_output(["mvn", "-v"], shell=True))

最新更新