Подтвердить что ты не робот

Как просто вызвать команду и не получить ее выход

В Python, что является самым коротким и стандартным способом вызова команды через subprocess, но не беспокоит ее выход.

Я попробовал subprocess.call, но, похоже, возвращает результат. Меня это не беспокоит, мне просто нужно запустить программу без помех, не выходя из экрана.

Если это помогает, я звоню pdflatex, и мое намерение - просто позвонить.

4b9b3361

Ответ 1

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
# do something with out, err, or don't bother altogether.

В принципе, это "трубы" независимо от того, что cmd выводит на stdout и stderr на буферы в памяти, подготовленные subprocess. То, что вы делаете с содержимым этих буферов, зависит от вас. Вы можете исследовать их или вообще не беспокоиться о них. Но побочный эффект соединения этих буферов заключается в том, что они не будут печататься на терминале.

edit: Это также работает с методом удобства, call. Для демонстрации:

>>> subprocess.call('ping 127.0.0.1')

Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
0
>>> subprocess.call('ping 127.0.0.1', stdout=subprocess.PIPE)
0

edit-2: обратите внимание на subprocess.call:

Примечание. Не используйте stdout = PIPE или stderr = PIPE с этой функцией. Поскольку трубы не читаются в текущем процессе, дочерний процесс может блок, если он генерирует достаточный выход в трубу, чтобы заполнить трубку ОС буфер.

Ответ 2

Если ваш процесс производит значительные объемы вывода, которые вы не хотите буферировать в памяти, вы должны перенаправить вывод на электронный мусорный контейнер:

with open(os.devnull, "w") as f:
    subprocess.call(["pdflatex", filename], stdout=f)

Переменная os.devnull - это имя нулевого устройства вашей операционной системы (/dev/null для большинства ОС, nul на другом).

Ответ 3

просто назовите его, как вы, и нажмите > /dev/null в конце comamnd. Это перенаправит любой текстовый вывод.

Ответ 4

Используйте/dev/null, если вы используете Unix. Если вы запустите любую команду в Shell и не хотите показывать ее вывод на терминале.

Например: - ls > /dev/null не будет выводить вывод на терминал.

Так что просто используйте os, subprocess, чтобы выполнить что-то в оболочке и просто поместите его o/p в/dev/null.