记录程序的标准输入和标准输出

记录程序的标准输入和标准输出

我想要的是运行一个程序并记录标准输入和标准输出,但我希望从文件提供标准输入。

我认为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

您可以在两个 tee 中使用相同的文件,但您的输入和输出可能会被破坏且无法读取。

答案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

它假设命令的任何输出都将在十分之一秒内完成。

相关内容