def StartProc(dir, parm):
global proc
proc_log = open(dir + os.sep + "MyLog.txt","w") #new path for each file
if parm:
proc = subprocess.Popen(path, 0, None, subprocess.PIPE, proc_log, None)
else:
MyReset(proc) #reset the process(proc) to its default values
proc.stdout = proc_log #no effect
print "fptr ", proc.stdout
#endif
#enddef
prm = True
for i in range(0, 5):
StartProc(i, prm)
prm = False
#endfor
То, что я хочу сделать, должно запустить исполняемый файл только однажды, но на каждом повторении я хочу перенаправить вывод процесса в различный файл. То, что происходит, то, что файлы создаются в другом пути, но производятся, перенаправляется в файл, который создается в первый раз.
Примечание: MyReset()
инициализирует процесс (исполняемый файл) к его значениям по умолчанию после первого повторения.
Следующая строка изменит процесс stdout на новый файл?
proc.stdout = proc_log
Как сказано выше, вы не можете изменить дескриптор файла, в который дочерний процесс записывает свой вывод.
Что вы можете сделать, так это прочитать вывод дочернего процесса в вашем питоновском скрипте, а затем записать его обратно в любой файл, какой захотите. Например:
proc = subprocess.Popen(path, 0, None, subprocess.PIPE, subprocess.PIPE, None)
for l in proc.stdout.readlines():
output_file.write(l)
Очевидно, что вам нужно понять, как должен вести себя элемент управления в вашем приложении, т.е. вы можете делать запись из основного потока, когда основной поток должен вернуться из StartProc()
в этом случае, или вы должны делать запись из другого потока, чтобы основной поток мог вернуться из StartProc()
немедленно.
Вы не можете. Как только процесс запускается, его stdout ничто не может измениться снаружи. Вам нужно попасть внутрь этого процесса «Пространство», чтобы погрузиться с его файловыми дескрипторами.
Если у вас есть путь (в MyReset ()
, я думаю), чтобы поговорить с запуском процесса, возможно, вы можете инженерировать способ передавать новое имя файла для его (RE), как его stdout , сюда.