가 여기 내 프로그램입니다 수입 서브 프로세스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
이것은 정확히 내가 필요한 것입니다. 나는 체크 표시를 클릭 할 것입니다! (그것은 아직, 3 분 제한에 대한 무언가, 당신은 빠르다!) 죄송합니다 내가 실행하려면 루트 액세스가 필요한 다른 프로그램에서 SCAPY 사용하고 있으며, 이것은 최고의 work-around 찾을 수 있습니다 감사합니다 많이. –
BTW2 : 서브 프로세스 모듈의 통신 메소드를 살펴보십시오. –
실행중인 명령이 아파치와 통신 할 수있는 소켓 서비스를 작성할 수있는 시간이 오래 걸린다면. 요청을 보낸 데이터가 필요할 때 서비스에서 세션 ID와 데이터를 반환합니다. 그런 다음 웹 페이지 (javascript 또는 redirect)에서 폴링하여 준비 될 때까지 해당 세션의 출력을 묻습니다. 이렇게하면 웹 스크립트가 3 분간 중단없이 실행될 필요가 없습니다. 예, 좀 더 복잡하지만 ... 다른 해결책은 아파치에서이 한계를 높입니다. –