总体情况是,我正在尝试将使用maven构建并部署到web逻辑服务器的部署过程自动化。小图是,我正在使用子进程来查看是否可以从python内部调用maven。当我尝试这个子进程时,错误的文件是mvn。到目前为止,我的代码如下:
import subprocess
def main():
print(subprocess.check_output(["mvn", "-v"]))
if __name__ == '__main__':
main()这是我的错误:
C:\pythondev\python.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:\pythondev\lib\subprocess.py", line 376, in check_output
**kwargs).stdout
File "C:\pythondev\lib\subprocess.py", line 453, in run
with Popen(*popenargs, **kwargs) as process:
File "C:\pythondev\lib\subprocess.py", line 756, in __init__
restore_signals, start_new_session)
File "C:\pythondev\lib\subprocess.py", line 1155, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
Process finished with exit code 1虽然我的问题在于子流程,但我愿意回答那些提出更好选择的答案。
发布于 2018-11-19 21:33:57
试试看它对我有用。
print(subprocess.check_output(["mvn", "-v"], shell=True))发布于 2020-03-10 09:10:39
我遇到了同样的问题,并且拒绝使用shell=True,因为互联网告诉我这是邪恶的。
当我在cmd.exe中运行cmd.exe时,我可以看到有两个匹配:
mvn,它是一个Unix脚本(以#!/bin/sh开头),mvn.cmd,它是一个Windows批处理文件。我认为在mvn something -something中执行cmd.exe会发生以下情况: Windows尝试查找名为mvn的可执行文件。它找到了mvn文件,但意识到这个文件是不可执行的。然后尝试查找像mvn.com、mvn.exe、.等文件。(请参阅%PATHEXT%系统变量)。当它找到mvn.cmd时,它会执行它,每个人都很高兴。
据我所知,subprocess.check_output (和subprocess.run等)的问题是没有执行通过%PATHEXT%进行的“扩展”。因此,解决方案是,您必须手动提供扩展并运行命令,如
print(subprocess.check_output(["mvn.cmd", "-v"]))https://stackoverflow.com/questions/53378973
复制相似问题