Если предположить, что дискурсивно означает бессвязное, а бессвязное означает все в одном файле, то следующий фрагмент - то, что вы просили.
Дискурсивная регистрация с различением источника и взаимодействия
Переопределите свой метод связи, как аналогичный вопрос здесь
import subprocess
def logcommunicate(self, s):
self.logfilehandle.write("Input "+s)
std = self.oldcommunicate(s)
self.logfilehandle.write("Output "+std[0])
return std
subprocess.Popen.oldcommunicate = subprocess.Popen.communicate
subprocess.Popen.communicate = logcommunicate
logfh = open("/tmp/communicate.log", "a")
proc = subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
proc.logfilehandle = logfh
result = proc.communicate("hello there\n")
print result
Дискурсивная регистрация с различением источника
Сначала используйте StringIO вместо файлов, затем подкласс StringIO, чтобы переопределить его метод записи, чтобы открыть, который добавляет метку времени и источник. Затем напишите пользовательскую функцию сравнения, которая сортирует на основе метки времени и источника, сначала метку времени, а затем источник ввода и затем вывод
with open("file.log","wb") as in logfile:
out = MyOutPutStringIO.StringIO()
in = MyInputStringIO.StringIO()
subprocess.Popen(cmd, shell=True, universal_newlines = True, stdin=in, stdout=out)
#Then after you are done
linestotal = []
for line in in.readlines():
linestotal.append(line)
for line in out.readlines():
linestotal.append(line)
linestotal.sort(customsortbasedontimestampandinput)
for line in linestotal.readlines():
logwrite.write(line)
Дискурсивное ведение журнала
with open("file.log","wb") as in logfile:
subprocess.Popen(cmd, shell=True, universal_newlines = True, stdin=logfile, stdout=logfile)
Обратное показано ниже
Курсовая регистрация
with open("stdout.txt","wb") as out:
with open("stderr.txt","wb") as err:
with open("stdin.txt","wb") as in:
subprocess.Popen(cmd, shell=True, universal_newlines = True, stdin=in,stdout=out,stderr=err)