在Debian上的Python 3中找不到mkdir命令

时间:2019-06-14 18:33:48

标签: python nginx debian uwsgi

我确定这很简单,但是我正在尝试几种设置,但似乎无法正常工作。

我有以下代码:

import subprocess

p = subprocess.Popen('mkdir -p /backups/my_folder', stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)

它正在flasknginx上的python 3应用程序中运行

执行此操作时,出现以下错误:

  

/ bin / sh:1:mkdir:找不到

我已经尝试过shell=False,已经尝试过Popen(['mkdir', ...]),并且已经尝试过question/answer这样的subprocess.run

如果我使用shell = False运行,则会出现以下错误:

  

错误:[Errno 2]没有这样的文件或目录:'mkdir -p   / backups / my_folder':'mkdir -p / backups / my_folder'

当我执行/bin/mkdir时,它可以工作。但是,还有其他命令会调用失败的子命令(例如,tar会调用gz

要使它正常工作,我缺少什么?

运行:

Debian 9.8,Nginx 1.14.0,Python 3.6.8

编辑

我也需要它来处理其他命令。我知道我可以使用os.makedirs,但是我将执行几个不同的命令(rsync,ssh,tar等)

3 个答案:

答案 0 :(得分:1)

对于这些简单的命令,请尝试使用python而不是调用shell-它使您与环境更加独立:

os.makedirs('/backups/my_folder', exist_ok=True)

答案 1 :(得分:0)

我发现了问题。

我意识到我的/etc/systemd/system/site.service uWSGI设置具有硬编码路径:

  

环境= / usr / local / bin

一次,我将其更改为包括/bin,我所有的子流程命令都很好地执行了。

答案 2 :(得分:-1)

import subprocess
p = subprocess.Popen('mkdir -p my_folder', stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
(result, error) = p.communicate()
print(result)

这仅适用于Windows 10。