2016-07-25 6 views
0

Я хочу запустить скрипт python, который может выполнять команды OS (linux), у меня есть несколько модулей, которые помогают мне в этом, например, os, subprocess. В модуле ОС не удается перенаправить вывод на переменную. В subprocess.popen я не могу использовать переменную в аргументах. Нужна помощь в поиске альтернативы.Выполнение команд ОС из python с использованием модулей

Я пытаюсь запустить некоторые команды ОС из сценария python. например, df -h. Он отлично работает с использованием некоторых модулей, таких как os или subprocess. Но я не могу хранить эти выходные данные для любой переменной.

Здесь я не могу сохранить этот вывод в переменной. Как сохранить это в переменной.

Я видел несколько других вариантов, таких как subprocess.Popen, но я не получаю надлежащего вывода.

Ниже программы я использовал модуль подпроцесса, но здесь у меня есть еще одна проблема, так как большая команда не может использовать переменные в подпроцессе.Popen.

+0

shantojosee @ СРВ-DCB-ПОР-mgnt01: ~/питон> кошачий пинг # /! USR/бен/питон импорт подпроцесс # Попросите пользователя для ввода хоста = raw_input («Введите хост для пинг:») # Настройка эхо-команду и направить вывод в трубу p1 = SU bprocess.Popen ([ 'пинг', '-c 2', хозяин], стандартный вывод = subprocess.PIPE) # Запустите команду выход = p1.communicate() [0] вывод на печать shantojosee @ srv- dcb-erp-mgnt01: ~/python> –

+1

Пожалуйста, отредактируйте свой вопрос, чтобы добавить код, а не раздел комментариев. – DeepSpace

ответ

0

Вы можете использовать subprocess метод check_output

import subprocess 
output = subprocess.check_output("your command", shell=True) 

см ранее ответил SO вопрос здесь для получения дополнительной информации: https://stackoverflow.com/a/8659333/3264217

Кроме того, для получения дополнительной информации о check_output см питона документы здесь: https://docs.python.org/3/library/subprocess.html#subprocess.check_output

0

Используйте подпроцесс или pexpect в зависимости от вашего конкретного варианта использования.

подпроцесс может делать то, что делает os.system, и многое другое. Если вам нужно запустить какую-либо команду, ждать его, чтобы выйти, а затем получить выход, подпроцесс может это сделать:

import subprocess 
res = subprocess.check_output('ls -l') 

Но если вам нужно взаимодействовать с некоторой утилитой командной строки, которая неоднократно чтения/записи, то посмотрите на модуль pexpect. Он написан для Unix-систем, но если вы когда-нибудь захотите перейти на кросс-платформу, есть порт для Windows под названием winpexpect. атрибут

SpawN в 'до', вероятно, что вам нужно:

p = pexpect.spawn('/bin/ls') 
p.expect(pexpect.EOF) 
print p.before 

(см docs)

Смежные вопросы