2013-10-09 1 views
1

링크 목록이 포함 된 웹 페이지를 생성하는 간단한 파이썬 모듈이 있습니다. 이 페이지는 브라우저에 자동으로 열립니다 webbrowser.open('file://' + file.name) : 여기에는 문제가 없습니다.
이 웹 페이지에서 링크 (href가 http://localhost/cgi-bin/script.py?param1=Something 인 링크)를 클릭하면 전달 된 값으로 일부 작업을 수행하고 내 컴퓨터에 로컬로 저장된 새 웹 페이지를 생성하는 cgi 스크립트가 실행됩니다 (예 : /home/user/web/out/과 같은 경로)에서 모든 rwx 권한을 올바르게 설정 한 폴더에 저장하십시오.
음, 나는이 새로운 페이지를 브라우저에서 2 일 동안 자동으로 열어보고 문서 및 포럼을 통해 검색 한 모든 솔루션을 시도했습니다. webbrowser.open()으로 다시 시도했지만 웹 서버에서 새 브라우저 창을 열 수 없기 때문에 사용할 수 없다는 것을 깨달았습니다. 그럼, 리디렉션 시도 먼저 헤더 (print "Content-type: text/html\n\n") 다음Python cgi 스크립트가 로컬 디렉토리에서 html 파일을 열지 않습니다.

print "Status: 302 Moved" 
print "Location: file:///home/user/web/out/abc.html\n\n"` 

를 인쇄하지만 이것은 단지 일반 빈 페이지를 보여줍니다. 내가 성공하지 않고, 심지어 새 페이지의 개통을 트리거하는 POST 방법으로 버튼을 삽입 시도

print "<meta http-equiv='refresh' content='0' url='file:///home/user/web/out/abc.html'>" 
print "<script type="text/javascript">location.href='file:///home/user/web/out/abc.html';</script>" 
print "<script type="text/javascript">windows.open('file:///home/user/web/out/abc.html');</script>" 

같은 다른 리디렉션 솔루션 시도했다 : 나는 일반 빈 페이지가 계속.
브라우저에서이 abc.html 페이지를 수동으로 열면 제대로 표시됩니다.

나는 이것이 웹 서버에서 열어 놓은 html 페이지가 로컬에 저장된다는 사실과 관련이 있다고 생각하지만이 문제를 해결하는 방법을 모르겠습니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

+0

저는 추측하고 있지만 로컬 파일로 리디렉션 할 수 있다면 웹 사이트를 호스팅하는 모든 사람이 컴퓨터의 모든 콘텐츠를 읽을 수 있습니다. 따라서 웹 사이트에서 로컬 파일로 리디렉션 할 수는 없습니다. 그러나 서버로 로컬 파일을 열고 내용을 제공 할 수 있습니다. – User

+0

@User Uhm ... '콘텐츠 제공'이란 무엇입니까? 실제로 새 웹 페이지를'cgi-bin/out/abc.html'에서 열어 썼습니다. 그러나 여전히 스크립트를 열거 나 리디렉션하지 않습니다. – Faabiioo

+0

CGI 스크립트가 리디렉션 할 수 없습니다. 기억해. 'http.server'에서'self.send_response (200, "스크립트 출력은"다음 ")입니다. – User

답변

0

CGI 스크립트가 리디렉션 할 수 없습니다.

Note that status code 200 is sent prior to execution of a CGI script, so 
scripts cannot send other status codes such as 302 (redirect). 

몇 가지 코드 :

self.send_response(200, "Script output follows") 

모듈 : http.server (파이썬 3)

하지만 당신은 단지 파일을 열고 표준 출력 내용을 복사 sys.stdout.write 또는 shutil을 사용할 수 있습니다 .

+0

'stdout'에 html 파일의 내용을 복사하지 않았습니다. 나는 웹 서버를 만들고 두 가지를 분리하려고하지만, 더 빠르고 더 쉬울 수 있기를 바랐다. – Faabiioo

+0

여전히 http 서버를 수정할 수있다. – User