2010-07-15 1 views
1

에 :sys.argv에 시뮬레이션하는 방법 [1]를 시작 스크립트는 다음과 같습니다 어디 파이썬 프로그램이 웹 기반 파이썬

if __name__ == "__main__": 
    main(sys.argv[1:]) 

이를 실행하려면이 같은 쉘 또는 터미널을 사용해야합니다 :

myscript somefile.xml 

스크립트는 파일을 받아들이고 나머지 모든 작업을 수행합니다. 이제 웹 서버에서이 프로그램을 실행하려고합니다.

그래서 HTML 양식을 사용하여이 스크립트에 파일을 제출합니다. 내 파이썬 스크립트에서 , 나는 다음과 같은 일을 오전 : 당신이 여기에서 볼 수 있듯이, 내가 직접 "주요"기능으로 파일을 전송하려고

.... 
elif req.form.has_key("filename"): 
    item=req.form["filename"] 
    if item.file: 
     req.write("I GO HERE") 
     myscript.main(item) 
.... 

. 이것이 올바른 방법입니까?

스크립트 오류는 발생하지 않지만 Python 스크립트가 예상 결과를 생성하지 않습니다.

어떤 도움이 필요합니까? 감사합니다.

+0

? 아니면 CGI 스크립트입니까? 그리고 실제로 어떻게됩니까? –

답변

1

tempfile.mkstemp()을 사용하여 업로드 된 파일 내용을 임시 파일에 쓰고 (tempfile.mkstemp() 사용) 임시 파일의 파일 이름을 main()에 넣습니다. (테스트되지 않은) 예를 들어

:

사용하고있는 프레임 워크
import os 
import tempfile  

fd, temp_filename = tempfile.mkstemp() 
try: 
    with os.fdopen(fd, "wb") as f: 
     # Copy file data to temp file 
     while True: 
      chunk = item.file.read(100000) 
      if not chunk: break 
      f.write(chunk) 

     # Call script's main() function 
     myscript.main([temp_filename]) 
finally: 
    os.remove(temp_filename) 
+0

답장을 보내 주셔서 감사합니다. 여기에 구문 오류가 있습니다. os.fdopen (fd, "wb")을 f로 사용 : – ssdesign

+0

어떤 버전의 Python입니까? 파일의 맨 위에'from __future__ import with_statement'를 추가해야 할 수도 있습니다. –

+1

복사 루프 후에'f.flush()'를 사용하여 내부 IO 버퍼가 플러시되고 모든 데이터가 실제로 파일에 기록되도록해야합니다. 또한 'tempfile.NamedTemporaryFile'과'shutil.copyfileobj'를 사용하여 코드를 단순화 할 수 있습니다. – lunaryorn