2015-06-18 2 views
3

У меня есть файл ткани python fabfile.py. Я хочу сохранить результат локальной команды в переменной, чтобы я мог проверить ее для разных случаев. Например, я хочу, чтобы это сделать ...Сохранение вывода команды в переменной

substring = "up-to-date" 
msg = local("git pull") 
if msg.find(substring) == -1: 
    "some action" 

, но я не в состоянии сохранить вывод в «MSG переменной». Как я могу это сделать ?

ответ

5

Как я делал это до того, как:

import subprocess 

p = subprocess.Popen(['git', 'pull'], stdout=subprocess.PIPE, 
             stderr=subprocess.PIPE) 
out, err = p.communicate() 

if "up-to-date" in out: 
    "some action" 
+0

Yippie ... его рабочий. Большое спасибо Крису. :) –

+0

Этот метод не работает, если я использую его для команды с более чем двумя словами. т.е. я попробовал это .. 'р = subprocess.Popen ([ 'мерзавец', 'принести', 'происхождение'], стандартный вывод = subprocess.PIPE, STDERR = subprocess.PIPE) из, эээ = р. связь() распечатать' Он не печатал какой-либо выход. pardon me, если я совершаю какие-либо ошибки, я новичок в программировании на питоне. Предложите мне способ Я могу сохранить o/p для команды любой длины. –

+0

@AnkitSahu '' 'git fetch origin''' ничего не возвращает, если ему это не нужно. Попробуйте самостоятельно в командной строке. –

0

Если вы используете версию Python старше 2.6 вы можете использовать POPEN, как в приведенном ниже примере.

import os 
substring = "up-to-date" 
msg = os.popen("git pull").read() 
if msg.find(substring) == -1 : 
    print "do something" 
+1

'' 'os.popen''' устарел от версии 2.6 –

+0

ooohhh thanks! – uelei

1

Я нашел решение, и это довольно просто. Нам просто нужно передать еще один параметр capture=true с local, чтобы сохранить вывод команды в переменной.

substring = "up-to-date" 
msg = local("git pull", capture=true) 
if substring in msg: 
    "do something" 
else: 
    "do something else" 
Смежные вопросы