Получение результата от команды subprocess.Popen на веб-страницу? (возможно проблема с apache) - PullRequest
0 голосов
/ 19 января 2012

Вот мой подпроцесс импорта программы

print "Content-type:text/html\r\n\r\n"
print "File starting to execute"
print "<br>"
proc = subprocess.Popen(["sudo", "python", "test3.py"], stdout=subprocess.PIPE)
output = proc.stdout.read()
print "output is %s" %output

print "<br>"
print "File Executed Awesomely"

Так что, когда я запускаю его из командной строки, он отлично работает, как показано ниже ->

[root@localhost html]# python test2.py
Content-type:text/html


File starting to execute
<br>

output is .
Sent 1 packets.

<br>
File Executed Awesomely
[root@localhost html]# 

, что идеально для ".Отправлено 1 пакетов. "это то, что я хочуНо когда я запускаю его с веб-страницы, на веб-странице просто отображается

File starting to execute
output is
File Executed Awesomely

, поэтому я изначально думал, что это происходит из-за того, что я что-то делал неправильно, получая выходные данные, но слушал порт с wireshark (моя другая программазвонки отправляют пакет) и похоже, что при вызове через веб-страницу пакеты не отображаются, но это происходит, когда я вызываю его в командной строке (так же).Глядя на мой apache error_log ->

[Wed Jan 18 18:15:11 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Jan 18 18:15:11 2012] [notice] Digest: generating secret for digest authentication ...
[Wed Jan 18 18:15:11 2012] [notice] Digest: done
[Wed Jan 18 18:15:11 2012] [warn] ./mod_dnssd.c: No services found to register
[Wed Jan 18 18:15:11 2012] [notice] Apache/2.2.17 (Unix) DAV/2 configured -- resuming normal operations

любые предложения о том, как я могу это исправить, чтобы мой скрипт apache cgi-bin выполнялся так же, как командная строка?

ПРАВКА: глядя нажурнал после нескольких звонков делает это неоднократно

[Wed Jan 18 18:22:37 2012] [error] [client 10.117.153.89] :
[Wed Jan 18 18:22:37 2012] [error] [client 10.117.153.89] sorry, you must have a tty to run sudo 

1 Ответ

1 голос
/ 19 января 2012

Сообщение sorry, you must have a tty to run sudo является ключом.Прежде всего, позволить вашему apache запускать sudo опасно, мягко говоря, но если вы действительно действительно хотите это сделать ... есть способ, отредактируйте /etc/sudoers (visudo) и найдите часть Defaults requiretty (man sudoers.другой модуль LSM.

...