Python: os.system () без возврата или ошибки - PullRequest
0 голосов
/ 21 декабря 2011

Мне нужно несколько раз использовать os.system () в моем скрипте, но я не хочу, чтобы ошибки из оболочки появлялись в окне моего скрипта. Есть ли способ сделать это? Я предполагаю, что это что-то вроде тихих команд, выполняющихся в полном объеме, но не возвращающих любой текст. Я не могу использовать 'try', потому что это не ошибка Python.

Ответы [ 2 ]

3 голосов
/ 21 декабря 2011

Вы можете перенаправить стандартную ошибку команды из терминала. Например:

# without redirect
In [2]: os.system('ls xyz')
ls: cannot access xyz: No such file or directory
Out[2]: 512

# with redirect
In [3]: os.system('ls xyz 2> /dev/null')
Out[3]: 512

P.S. Как отмечает @Spencer Rathbun, модуль subprocess должен быть предпочтительнее, чем os.system(). Помимо прочего, он дает вам прямой контроль над stdout и stderr подпроцесса.

2 голосов
/ 21 декабря 2011

Рекомендованный способ для вызова подпроцесса и манипулирования его стандартным выводом и стандартной ошибкой состоит в использовании модуля подпроцесс .Вот как можно подавить как стандартный вывод, так и стандартный вывод:

import subprocess

# New process, connected to the Python interpreter through pipes:
prog = subprocess.Popen('ls', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
prog.communicate()  # Returns (stdoutdata, stderrdata): stdout and stderr are ignored, here
if prog.returncode:
    raise Exception('program returned error code {0}'.format(prog.returncode))

Если вы хотите, чтобы подпроцесс печатал на стандартный вывод, вы можете просто удалить stdout=….

...