Команда mkdir не найдена в Python 3 в Debian - PullRequest
1 голос
/ 14 июня 2019

Я уверен, что это что-то простое, но я пробую несколько настроек и просто не могу заставить это работать.

У меня есть следующий код:

import subprocess

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

Это выполняется в flask приложении на nginx и python 3

Когда это выполняется, я получаю следующую ошибку:

/ bin / sh: 1: mkdir: не найдено

Я пытался с shell=False, я пытался с Popen(['mkdir', ...]), и я пытался 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

EDIT

Мне нужно, чтобы это работало и для других команд. Я знаю, что могу использовать os.makedirs, но у меня есть несколько разных команд, которые я буду выполнять (rsync, ssh, tar и другие)

Ответы [ 3 ]

1 голос
/ 14 июня 2019

Для этих простых команд попробуйте использовать python вместо вызова оболочки - это сделает вас более независимым от окружения:

os.makedirs('/backups/my_folder', exist_ok=True)
0 голосов
/ 14 июня 2019

Я нашел проблему.

Я понял, что мои /etc/systemd/system/site.service настройки uWSGI имеют жестко заданный путь:

Environment = / usr / local / bin

Однажды я изменил это, чтобы включить /bin, все мои команды подпроцесса выполнялись просто отлично.

0 голосов
/ 14 июня 2019
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.

...