2016-08-29 6 views
0

사용자가 다양한 프로그래밍 문제를 해결하려고 시도하는 웹 응용 프로그램을 작성하고 있습니다. 사용자가 실행 파일 인 .py 파일을 업로드하면 응용 프로그램에서 미리 지정된 입력을 제공하고 출력이 올바른지 확인합니다. (와 유사한 방법 Codeforce 작품) 내가 정상 input() 기능에 의해 포착 될 사용자의 스크립트 입력을 공급하고, 검색, 내 자신의 파이썬 스크립트 내에서 사용자의 스크립트를 실행 어떻게, 나는 사용자의 스크립트를 업로드 한 가정파이썬 내에서 파이썬 파일을 실행하면서 입력을 받아서 출력을 검색합니다.

의 출력이 정확함을 확인할 수 있도록 기능이 있습니까?

+0

input_data = input() print("Input recieved!\nData: " + input_data) 

출력

import subprocess # create process process = subprocess.Popen( ['python3.4','script_to_execute.py'], # shell command stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) # encode string into bytes, since communicate function only accepts bytes input_data = "Captured string".encode(encoding='UTF-8') # send the input to the process, retrieve output of print() function stdoutdata, stderrdata = process.communicate(input=input_data) # decode output back into string output_data = stdoutdata.decode(encoding='UTF-8') print(output_data) 

script_to_execute.py. 질문을하기 전에 문제를 해결하기 위해 노력하십시오. 더 자주 그런 다음에, 당신은 자신의 문제를 해결하게 될 것입니다. –

답변

1

알아 냈어.

참고 : 프로덕션 환경에서 이것을 사용하려면 사용자가 실행할 수있는 것에 제한을 설정해야합니다.

executor.py executor.py 당신이 노력이 무엇

Input recieved! 
Data: Captured string 
+4

누군가 업로드 한 스크립트를 실행하면 서버가 나쁜 일을 할 때까지 초를 세어 볼 수 있습니다. 최소한 제한된 사용자 계정으로 하위 프로세스를 시작해야합니다. –

+0

... 또는 virtualenv. – boardrider

+1

'Popen' 생성자에'universal_newlines = True'를 넘겨 주면'str'을 전달하여'bytes'에 대한 명시 적 인코딩이나'bytes'에서의 디코딩없이'str'을받을 수 있습니다; '의사 소통'은'str'을 인수로 취하고'str'의 2 조를 반환합니다. 'locale.getpreferredencoding (False)'에 의해 반환 된 인코딩을 사용하기 때문에 일부 컴퓨터 (특히 Windows에서는 보통 'utf-8'대신에'cp1252'와 같이 끔찍한 것이 있습니다)에서 명시 적 'encode'와'decode' 단계를 거칩니다. – ShadowRanger