Python脚本中用subprocess.run()执行dotnet命令报错,CMD运行正常求助
Python subprocess执行dotnet命令报错:命令未被识别
我尝试在Python脚本中运行一个需通过CMD访问的程序,代码如下:
command = 'C:\\Users\\xxx\\Documents\\chatbot.Cli\\dotnet chatbot.Cli.dll export -f PlainText -p 140 -o "C:\\Users\\xxx\\Documents\\xxx.txt" --after "2023-05-18 09:00"' subprocess.run(command, shell=True)
运行后出现错误:
'C:\Users\xxx\Documents\chatbot.Cli\dotnet' 未被识别为内部或外部命令、可运行的程序或批处理文件。
已安装.NET 7.0,且在CMD中执行完全相同的命令可正常运行,求问问题原因及解决办法。
解决方案
问题核心:你错误地将
dotnet命令的路径指定为C:\\Users\\xxx\\Documents\\chatbot.Cli\\dotnet,但dotnet是.NET框架的全局可执行命令,本身不在你的chatbot.Cli目录下。CMD中能正常运行,是因为dotnet已加入系统环境变量PATH,系统可以直接找到它;而Python脚本里的命令给dotnet硬加了本地路径,导致系统找不到这个不存在的文件。修正后的代码(保留shell=True):
import subprocess # 正确的命令是直接调用dotnet,再指定dll文件的完整路径 command = 'dotnet "C:\\Users\\xxx\\Documents\\chatbot.Cli\\chatbot.Cli.dll" export -f PlainText -p 140 -o "C:\\Users\\xxx\\Documents\\xxx.txt" --after "2023-05-18 09:00"' subprocess.run(command, shell=True)
- 更安全的写法(不依赖shell=True):
避免使用shell=True可以降低shell注入风险,将命令拆分为列表参数传递:
import subprocess command = [ 'dotnet', 'C:\\Users\\xxx\\Documents\\chatbot.Cli\\chatbot.Cli.dll', 'export', '-f', 'PlainText', '-p', '140', '-o', 'C:\\Users\\xxx\\Documents\\xxx.txt', '--after', '2023-05-18 09:00' ] subprocess.run(command, check=True) # check=True可在命令执行失败时抛出异常
内容的提问来源于stack exchange,提问作者Tim Doll
相关产品推荐
相关产品推荐

