양식 데이터를 가져 와서 셸 명령을 실행 한 다음 자체 버전 중 하나 또는 다른 버전을 표시하는 할당 (Python 2.4) 용 작은 CGI 스크립트를 작성하고 있습니다. 페이지가 방금 한 일에 따라 예 : 주석을 추가하면 "모든 항목 목록"보기보다는 "항목"버전의 페이지가 다시로드되어 새 주석이 통합됩니다. 프로그램에 몇 가지 위치가 있는데, 프로그램 자체를 다시로드해야합니다. 한 장소에서 그것은 작동하고 한 곳에서 그렇지 않습니다. 그리고 저는 그 차이를 보려고 내 뇌를 깨고 있습니다.파이썬 CGI 스크립트 - 리다이렉트가 항상 작동하지 않는 경우
if mode == "change":
if newcomment != "":
comment_command = "some shell command \"" + item + "\" " + comment
os.system(comment_command)
if rating != "":
rate_command = "same command \"" + item + "\" " + rating
os.system(rate_command)
# this NEVER works!
print "%s%s" % ("Location:http://blahblah/cgi-bin/myproject.cgi?item=", urllib.quote_plus(item))
elif mode == "newitem":
add_command = "command \"" + newitem + "\""
result = os.system(add_command)
retcode = os.WEXITSTATUS(result)
# redirect depending on results
if retcode == 1:
# this one always works!
print "%s%s" % ("Location:http://blahblah/cgi-bin/myproject.cgi?item=", urllib.quote_plus(newitem))
else:
print("Location:http://blahblah/cgi-bin/myproject.cgi")
이 코드로 충분합니다. 나는 왜 그것이 한 곳에서 작동하는지, 다른 곳에서 작동하는지 보지 못한다. ?item= version
이 한 곳에서 작동한다는 것을 제외하면 리디렉션에서 리디렉션을 시도하고 "지나치게 빠지다"는 것을 모두 무시한다고 가정합니다. os.system에 대해 이해할 수없는 것이 있습니까?
첫 번째 명령이 값을 반환하고 두 번째 명령이 값을 반환하지 않기 때문에 이것이 올바른 트랙 일 것이라고 확신합니다. 나는 그 값으로 무엇이든 할 필요가 없다. 나는 그 라인의 os.system 명령어를 subprocess.Popen으로 바꾸려고 시도했지만, 여전히 똑같은 일을한다. 명령을 실행 한 다음 반환하는 값을 덤프하는 방법이 있습니까? 고맙습니다. – umbraphile
그게 그가 당신에게 준 것입니다. 서브 프로세스 모듈 문서를 읽으십시오. –
a = Popen()은 Popen 객체를 제공합니다. a.communicate()를 실행 한 다음 종료 코드 값에 대해 a.returncode를 수행하십시오. – tito