2017-12-31 36 views
0

두 개의 사용자 정의 파이썬 스크립트가 있습니다. 첫 번째 파일은 파일을 처리하고 두 번째 스크립트는 첫 번째 출력을 받아 실행 파일을 실행하고 첫 번째 스크립트 출력을 추가 형식 지정 프로그램에 제공합니다.파이썬 스크립트 연결하기

필자의 주요 실행 스크립트 인 다른 python 스크립트를 통해이 스크립트를 실행해야합니다.

이 주제에 대해 조금 훑어 보았습니다.

  1. 나는 importlib을 사용하여 적절한 시간에 전화 할 수 있도록 스크립트 내용을 수집 할 수 있습니다. 이를 위해서는 스크립트가 내 디렉토리 아래에 있거나 경로 환경 변수를 수정해야합니다. 그래서 조금 비관적인데, 파이썬 같지는 않습니다.
  2. 내장 된 eval 기능. 이것은 사용자가 구조와 같은 서버 - 클라이언트를 작성해야하므로 두 번째 스크립트가 첫 번째 스크립트가 출력을 제공하는 동안 한 번 이상 상기 프로그램을 실행해야 할 수도 있습니다.

내가 뭔가 잘못 설계 한 것 같지만 더 나은 방법을 생각해 낼 수 없습니다. 그렇게하는 동안

더 자세한 explenation (어쩌면 횡설수설)

가 나는 데이터의 표준 양식이 벤치 마크에 일부 프로그램이 필요하고,이 데이터는 벤치 마크 프로그램에 공급 될 필요가있다. 스크립트는 각 프로그램마다 특수한 (벤치 마크의 특성으로 인해) 벤치 마크 정의와 함께 번들로 제공해야하지만이 프로그램을 독립형 구성 가능 테스터로 만들어야합니다. 생각하기에, 나는 틀린 것을 디자인했고, 디자인 접근법을 듣는 것을 좋아할 것입니다.

추신 : 나는 사용자를 제한하고 싶지 않으며, 이것이 내가 파이썬 스크립트를 실행하도록 선택한 이유입니다.

답변

1

이 스크립트가 작동하는지 확인하기 위해 몇 가지 테스트 스크립트를 만들었습니다. 첫 번째 것 (count_01.py)은 100 초 동안 대기 한 다음 0에서 99까지 카운트하고 count_01.output으로 보냅니다. 두 번째 파일 (count_02.py)은 첫 번째 파일 (count_01.output)의 출력을 읽고 각 번호에 1을 더하고 그 파일을 count_02.output에 씁니다. 세 번째 스크립트 (chaining_programs.py)는 첫 번째 스크립트를 실행하고 두 번째 스크립트를 호출하기 전에 완료되기를 기다립니다.

# count_01.py -------------------- 
from time import sleep 

sleep(100) 

filename = "count_01.output" 
file_write = open(filename,"w") 
for i in range(100): 
    #print " i = " + str(i) 
    output_string = str(i) 
    file_write.write(output_string) 
    file_write.write("\n") 
file_write.close() 
# --------------------------------- 

# count_02.py -------------------- 
file_in = "count_01.output" 
file_out = "count_02.output" 
file_read = open(file_in,"r") 
file_write = open(file_out,"w") 
for i in range(100): 
    line_in = file_read.next() 
    line_out = str(int(line_in) + 1) 
    file_write.write(line_out) 
    file_write.write("\n") 
file_read.close() 
file_write.close() 
# --------------------------------- 

# chaining_programs.py ------------------------------------------------------- 
import subprocess 
import sys 
#----------------------------------------------------------------------------- 
path_python = 'C:\Python27\python.exe' # 'C:\\Python27\\python.exe' 
# 
# single slashes did not work 
#program_to_run = 'C:\Users\aaaaa\workspace\Rich_Project_044_New_Snippets\source\count.py' 
program_to_run_01 = 'C:\\Users\\aaaaa\\workspace\\Rich_Project_044_New_Snippets\\source\\count_01.py' 
program_to_run_02 = 'C:\\Users\\aaaaa\\workspace\\Rich_Project_044_New_Snippets\\source\\count_02.py' 
#----------------------------------------------------------------------------- 
# waits 
sys.pid = subprocess.call([path_python, program_to_run_01]) 
# does not wait 
sys.pid = subprocess.Popen([path_python, program_to_run_02]) 
#----------------------------------------------------------------------------- 
+0

도움을 주셔서 감사합니다.하지만 제가 잘못했다고 생각합니다. 두 번째 스크립트는 실행되는 동안 첫 번째 스크립트의 출력을 가져야하지만 코드는 나에게 아이디어를 제공했습니다. base64를 사용하여 두 번째 파이썬 스크립트로 보내야하는 데이터를 인코딩 할 수 있으므로 표준 입력에서 공간까지 읽고 읽을 수 있습니다. 이것은 더 나쁜 방법 일 수 있지만 사용자는 첫 번째 스크립트 –

+0

의 출력을 받기 위해 글을 적게 작성해야합니다. 아마도 도움이 될 것입니다. https://stackoverflow.com/questions/33131863/read-console-output-of-another-program- 비단뱀 –