프로그램의 표준 입력 및 표준 출력 로깅

프로그램의 표준 입력 및 표준 출력 로깅

내가 원하는 것은 프로그램을 실행하고 stdin 및 stdout을 기록하는 것이지만 stdin이 파일에서 제공되기를 원합니다.

나는 script log.txt < input.txt그것이 작동할 것이라고 생각했지만 표준 입력이 기록되지 않고 출력만 기록되기 때문에 작동하지 않습니다.

input.txt는 어디에 있습니까?

./program
something for the stdin of program
some more stuff

답변1

이것이 가장 좋은 해결책은 아닐 수도 있지만 다음을 수행할 수 있습니다.

cat file.txt | tee -a stdin.txt | ./program | tee -a stdout.txt

두 티 모두에서 동일한 파일을 사용할 수 있지만 입력 및 출력이 손상되어 읽을 수 없을 수 있습니다.

답변2

당신은 이미 표준 입력 로그를 가지고 있습니다: 그것이 당신의 파일입니다.

그렇지 않고(이것이 달성하려는 것인지 확실하지 않음) stdin과 stdout을 모두 포함하는 로그를 원하는 경우 처리되기 전에 stdin에서 stdout로 행을 읽도록 프로그램을 수정할 수 있습니다.

답변3

나는 결국 이것을 하나로 묶었습니다.

import subprocess
import time
import sys

log = open(sys.argv[3], 'w')

input = open(sys.argv[2], 'r')

p = subprocess.Popen([sys.argv[1]], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

def readAllSoFar(proc, retVal=''):
  while (subprocess.select.select([proc.stdout],[],[],0)[0]!=[]):
    retVal+=proc.stdout.read(1)
  return retVal

while True:
    print('starting loop')
    line = input.readline()
    print('read line ' + line)
    if not line:
        print('breaking')
        break

    print('before sleep1')
    time.sleep(0.1)
    print('before readAllSoFar')
    output = readAllSoFar(p)
    print('got output' + output)
    log.write(output)
    time.sleep(0.1)
    log.write(line)
    p.stdin.write(line)

실행해python runner.py ./program_to_run input.txt output.txt

명령의 모든 출력은 10분의 1초 내에 완료된다고 가정합니다.

관련 정보