내가 원하는 것은 프로그램을 실행하고 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초 내에 완료된다고 가정합니다.