在 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)
这是运行在 nginx
和 python 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
,我所有的子进程命令都执行得很好。
我确定这很简单,但我正在尝试多种设置,但似乎无法正常工作。
我有以下代码:
import subprocess
p = subprocess.Popen('mkdir -p /backups/my_folder', stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
这是运行在 nginx
和 python 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
,我所有的子进程命令都执行得很好。