Отключите консольный вывод от подпроцесса. Popen в Python

Это вызвало меня огромные головные боли, пытающиеся реализовать такую сетку для нашего приложения. Я попробовал все различные методы там, но у каждого из них были проблемы. Самое близкое я приехал, использовало плагин jQuery такой в качестве Flexigrid (взгляд http://www.ajaxrain.com для альтернатив), но это, кажется, не поддерживает таблицы 100% шириной, который является тем, в чем я нуждался.

то, Что я закончил тем, что делал, прокручивало мое собственное; Firefox поддерживает прокрутку tbody элементы так я, браузер осуществил сниффинг и использовал соответствующий CSS (устанавливающий высоту, переполнение и т.д.... спрашивают, хотите ли Вы больше деталей) сделать ту прокрутку, и затем для других браузеров я использовал два отдельных набора таблиц для использования table-layout: fixed, который использует алгоритм калибровки, который, как гарантируют, не переполнит установленного размера (нормальные таблицы расширятся, когда содержание будет слишком широко для установки). Путем предоставления обеим таблицам идентичных ширин я смог заставить их столбцы выстраиваться в линию. Я перенесся, второй в отделении установил на прокрутку, и с небольшим количеством jiggery pokery с полями и т.д. сумел получить стиль, который я хотел.

Жаль, если этот ответ звучит немного неопределенным в местах; я пишу быстро, поскольку у меня нет большого количества времени. Оставьте комментарий, если Вы хотите, чтобы я расширился дальше!

8
задан Denis Masyukov 7 August 2009 в 13:34
поделиться

2 ответа

fh = open("NUL","w")
subprocess.Popen("taskkill /PID " + str(p.pid), stdout = fh, stderr = fh)
fh.close()
7
ответ дан 5 December 2019 в 08:25
поделиться
import os
from subprocess import check_call, STDOUT

DEVNULL = open(os.devnull, 'wb')
try:
    check_call(("taskkill", "/PID", str(p.pid)), stdout=DEVNULL, stderr=STDOUT)
finally:
    DEVNULL.close()

Я всегда передаю кортежи в подпроцесс, так как это избавляет меня от беспокойства о побеге. check_call гарантирует, что (а) подпроцесс завершится до того, как канал закроется, и (б) сбой в вызываемом процессе не будет проигнорирован. Наконец, os.devnull - это стандартный кроссплатформенный способ сказать NUL в Python 2.4 +.

Обратите внимание, что в Py3K подпроцесс предоставляет вам DEVNULL, поэтому вы можете просто напишите:

from subprocess import check_call, DEVNULL, STDOUT

check_call(("taskkill", "/PID", str(p.pid)), stdout=DEVNULL, stderr=STDOUT)
13
ответ дан 5 December 2019 в 08:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: