2012-01-18 3 views
0

가 여기 내 프로그램입니다 수입 서브 프로세스subprocess.Popen 명령의 출력을 웹 페이지로 가져 오겠습니까? 내가 명령 줄에서 실행할 때 (아마도 아파치 문제)

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" 

는 그래서

[[email protected] html]# python test2.py 
Content-type:text/html 


File starting to execute 
<br> 

output is . 
Sent 1 packets. 

<br> 
File Executed Awesomely 
[[email protected] html]# 

완벽한입니다> follows-처럼 좋은 작품 ". 1 개의 패킷을 보냈습니다." 내가 원하는거야. 나는 웹 페이지에서 실행할 때, 웹 페이지는 단지

File starting to execute 
output is 
File Executed Awesomely 

그래서 난 원래 내가 출력을 잡아 뭔가를 잘못 되었기 때문이라고 생각하지만 난 와이어 샤크와 포트에 귀를 기울이 (내 다른 프로그램은이 통화 전송 패킷) 및 웹 페이지 호출을 통해 패킷이 나타나지 않는 것처럼 보이지만 명령 줄에서 동일한 방법으로 호출하면됩니다. 내 아파치 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 

나는 그렇게 내 아파치 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

메시지 sorry, you must have a tty to run sudo을하는 전화를 몇 통 한 후 로그보고가 핵심이다. 우선, 아파치가 sudo를 실행하도록하는 것은 위험하지만, 실제로는 정말로하고 싶다면 ... /etc/sudoers()을 편집하고 Defaults requiretty 부분 (man sudoers)을 찾으십시오.

주의 : sudo를 사용하여 아파치가 아무것도 실행하지 못하게하고, 정확히 무엇이 필요한지 지정하십시오.

현재 : SELinux가 활성화되어 있거나 다른 LSM 모듈이있는 경우 여전히 작동하지 않을 수 있습니다.

+0

이것은 정확히 내가 필요한 것입니다. 나는 체크 표시를 클릭 할 것입니다! (그것은 아직, 3 분 제한에 대한 무언가, 당신은 빠르다!) 죄송합니다 내가 실행하려면 루트 액세스가 필요한 다른 프로그램에서 SCAPY 사용하고 있으며, 이것은 최고의 work-around 찾을 수 있습니다 감사합니다 많이. –

+0

BTW2 : 서브 프로세스 모듈의 통신 메소드를 살펴보십시오. –

+0

실행중인 명령이 아파치와 통신 할 수있는 소켓 서비스를 작성할 수있는 시간이 오래 걸린다면. 요청을 보낸 데이터가 필요할 때 서비스에서 세션 ID와 데이터를 반환합니다. 그런 다음 웹 페이지 (javascript 또는 redirect)에서 폴링하여 준비 될 때까지 해당 세션의 출력을 묻습니다. 이렇게하면 웹 스크립트가 3 분간 중단없이 실행될 필요가 없습니다. 예, 좀 더 복잡하지만 ... 다른 해결책은 아파치에서이 한계를 높입니다. –