在 Debian 上用 Python 3 找不到 mkdir 命令

mkdir command not found with Python 3 on Debian

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

我有以下代码:

import subprocess

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

这是运行在 nginxpython 3

上的 flask 应用程序中

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

/bin/sh: 1: mkdir: not found

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

如果我 运行 和 shell=False,我得到以下错误:

Error: [Errno 2] No such file or directory: 'mkdir -p /backups/my_folder': 'mkdir -p /backups/my_folder'

当我 /bin/mkdir 时,它起作用了。但是,还有其他命令调用失败的子命令(例如 tar 调用 gz

我缺少什么才能让它工作?

运行:

Debian 9.8,Nginx 1.14.0,Python3.6.8

编辑

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

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

os.makedirs('/backups/my_folder', exist_ok=True)
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.

我发现了问题。

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

Environment = /usr/local/bin

有一次,我将其更改为包含 /bin,我所有的子进程命令都执行得很好。