python - 为什么 python subprocess 命令在通过 API 调用执行时得到 [Errno 2] No such file or directory: 'ls': 'ls'
问题描述
我subprocess
通过调用使用 Gunicorn 公开的 Flask 开发的 API 来运行一个简单的命令,无论命令是什么,我都会收到错误:[Errno 2] No such file or directory:
代码示例
from .. import app
from flask import request, jsonify
import logging
import subprocess
from datetime import datetime
from subprocess import Popen, PIPE
from subprocess import check_output
def get_shell_script_output_using_communicate():
session = subprocess.Popen('ls', stdout=PIPE, stderr=PIPE)
stdout, stderr = session.communicate()
if stderr:
raise Exception("Error "+str(stderr))
return stdout.decode('utf-8')
@app.route("/api/start_command", methods=['POST'])
def start_command():
logging.basicConfig(filename='/home/import.log', level=logging.INFO)
out = get_shell_script_output_using_communicate()
logging.info("{} {} {} ".format(datetime.now(), "command finished", out))
当然,预期的输出是记录ls
命令结果。
我可以在(让我说)非 Web 服务模式下运行相同的命令而没有任何问题。我还尝试了所有不同版本的子进程调用,有和没有shell=True
. 我究竟做错了什么?是否可以在 gunicorn-flask 程序中运行子进程?
解决方案
推荐阅读
- javascript - SetInterval mySQL 每秒查询一次
- python - 使用 class_weights 时无法解释决策树
- javascript - 如何通过 DOM 在 JavaScript 中获取表格标题单元格的宽度?
- uwp - 如何将 PWA 网站打包为 UWP 应用?
- android-emulator - 如何在android studio中升级chrome浏览器版本Android 7.0模拟器
- flutter - 如何在两个列子项之间居中一个小部件?
- angularjs - 递归角度指令
- javascript - Object.defineProperty 不改变元素的属性
- php - 无法获取 _POST 元素
- mysql - 用 MySQL 查询替换 html 样式属性