Подпроцесс не запускается в cgi-скрипте Python

#python #python-3.x #subprocess #cgi

#python #python-3.x #подпроцесс #cgi

Вопрос:

У меня проблема при запуске подпроцесса в скрипте Python CGI.

Я собираюсь запустить файл python как подпроцесс в скрипте python CGI.

script.py

 #!enable debugging
import cgitb
cgitb.enable()

print("Content-Type: text/html;charset=utf-8")
print()

import subprocess
p = subprocess.Popen(["sudo", "/usr/bin/python3", "test.py"], stdout=subprocess.PIPE)
  

test.py

 f.open("test.txt", "a")
f.write("This is test")
f.close()
  

Если я запускаю script.py в консоли, он успешно создает test.txt файл.
Но если я запускаю его в браузере с помощью Python CGI, он не может быть создан test.txt .

Я подумал, что это может быть вызвано разрешением, поэтому я попытался создать test.txt в script.py напрямую, а не на ‘test.py ‘, он создан успешно.

Итак, основная проблема в том, что скрипт Python CGI не может запустить подпроцесс.

Я не могу получить какую-либо ошибку при запуске в браузере в качестве скрипта Python CGI.

Как я могу исправить эту проблему?

Ответ №1:

Пожалуйста, если sudo не работает, посмотрите в системном журнале. Могут быть сообщения, которые помогут вам с отладкой. Файлы находятся в, /var/log и если вы составите список по времени ls -t , вы увидите, какие из них изменились только что.

Сначала попробуйте без sudo. Создайте свой файл в месте, где ему не требуется разрешение sudo, например /tmp/test.txt . Тогда вы знаете, является ли проблема sudo или чем-то еще.

Комментарии:

1. Он успешно создан без sudo . Спасибо 🙂

2. Возможно, вам вообще не нужен sudo при записи в «реальное» местоположение. Если вам действительно нужен sudo, то, возможно, вам нужна опция NOPASSWD. Вы можете узнать подробности в Google, если вам нужно. (На самом деле это не проблема Python.)

3. Я изменил разрешение на запись в каталог файлов для пользователя www-data на CRUD. Итак, его можно успешно создать без sudo?