【问题标题】:Executing bash commands from flask application从烧瓶应用程序执行 bash 命令
【发布时间】:2019-01-30 19:42:52
【问题描述】:

应用详情:Ubuntu 16.04 + flask + nginx + uwsgi

我正在尝试从烧瓶应用程序执行 bash 命令。

@app.route('/hello', methods=('GET', 'POST'))
def hello():
    os.system('mkdir my_directory')
    return "Hello"

以上代码运行成功,但没有创建任何目录。它还在我的本地创建没有任何 nginx 级别设置的目录。

我也尝试了以下方法:

  1. subprocess.call(['mkdir', 'my_directory']) # 引发内部服务器错误
  2. subprocess.call(['mkdir', 'my_directory'],shell=True) # 没有错误但没有创建目录
  3. subprocess.Popen(['mkdir', 'my_directory']) # 引发内部服务器错误
  4. subprocess.Popen(['mkdir', 'my_directory'],shell=True) # 没有错误但没有创建目录

我是否需要任何 nginx 级别的配置更改。

【问题讨论】:

  • 你试过import os os.makedirs(my_directory) 吗?
  • 它将在您的应用程序运行的任何目录中创建 my_directory,尝试给它一个绝对路径而不是目录名称。例如mkdir /home/you/output_dirs/my_directory
  • 代码尝试在工作目录中创建目录。尝试通过 os.getcwd() 查看工作目录。可能应用程序没有对该文件夹的 r/w 访问权限。另外,检查 subprocess.call 的返回码。
  • @Pradeepb os.makedirs 正在工作。但是任何 shell 命令都不起作用。
  • @VivekAkupatni subprocess.call 返回 127。我正在当前工作目录中创建我认为所有 r/w 访问的目录。因为我可以在同一执行点使用os.makedirs 创建目录。

标签: python bash nginx flask uwsgi


【解决方案1】:

我终于明白了。我关注了Python subprocess call returns “command not found”, Terminal executes correctly

我缺少的是mkdir 的绝对路径。当我执行subprocess.call(["/bin/mkdir", "my_directory"])时,它使目录成功。

以上链接包含完整的详细信息。

如果有人能描述我需要为mkdir 指定绝对路径的原因,我将不胜感激。

谢谢大家。 :)

【讨论】:

  • 我也有同样的问题,我认为它来自 uwsgi,因为当我运行烧瓶开发服务器时我不使用完整路径,我只使用“mkdir”。
猜你喜欢
  • 1970-01-01
  • 2018-11-18
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 2015-09-07
  • 1970-01-01
  • 2019-10-19
相关资源
最近更新 更多