Я должен запустить много продолжительных процессов с subprocess.Popen
, и хотел бы иметь stdout
и stderr
от каждого автоматически переданного по каналу для разделения файлов журнала. Каждый процесс будет работать одновременно в течение нескольких минут, и я хочу два файла журнала (stdout
и stderr
) для каждого процесса, чтобы быть записанным в как выполненные процессы.
Сделайте я должен постоянно звонить p.communicate()
на каждом процессе в цикле, чтобы обновить каждый файл журнала или является там некоторым способом вызвать оригинал Popen
команда так, чтобы stdout
и stderr
автоматически передаются потоком для открытия дескрипторов файлов?
Поскольку вы находитесь в Windows, службы SQL Server Reporting Services отлично подходят и бесплатны для SQL Server. WYSIWYG можно выполнять в Visual Studio или с помощью автономного инструмента проектирования, который создает PDF вместе с другими типами отчетов, такими как Excel.
После разработки отчета он представляет собой XML-файл, который находится на сервере отчетов и вызывается в приложении C # по SOAP или URL.
Скорее всего, у вас уже есть все, что нужно для его использования.
-121--4043344- Можно передать stdout
и stderr
в качестве параметров Popen ()
subprocess.Popen(self, args, bufsize=0, executable=None, stdin=None, stdout=None,
stderr=None, preexec_fn=None, close_fds=False, shell=False,
cwd=None, env=None, universal_newlines=False, startupinfo=None,
creationflags=0)
Например,
>>> import subprocess
>>> with open("stdout.txt","wb") as out, open("stderr.txt","wb") as err:
... subprocess.Popen("ls",stdout=out,stderr=err)
...
<subprocess.Popen object at 0xa3519ec>
>>>
-121--1140298- по документам ,
stdin, stdout и stderr стандартный ввод исполняемых программ, стандартный вывод и стандартная ошибка дескрипторы файлов соответственно. Действительный значения PIPE, существующий файл дескриптор (положительное целое число), существующий объект файла и значение «Нет».
Поэтому просто передайте открытые для записи файловые объекты как именованные аргументы stdout =
и stderr =
, и вы должны быть в порядке!
Вы можете передать stdout
и stderr
в качестве параметров в Popen ()
subprocess.Popen(self, args, bufsize=0, executable=None, stdin=None, stdout=None,
stderr=None, preexec_fn=None, close_fds=False, shell=False,
cwd=None, env=None, universal_newlines=False, startupinfo=None,
creationflags=0)
, например
>>> import subprocess
>>> with open("stdout.txt","wb") as out, open("stderr.txt","wb") as err:
... subprocess.Popen("ls",stdout=out,stderr=err)
...
<subprocess.Popen object at 0xa3519ec>
>>>