Как сохранить выходные данные печати (subprocess.checkout) в переменной в Python? - PullRequest
0 голосов
/ 17 января 2020

У меня есть приведенный ниже оператор печати

print(subprocess.check_output(['bash', '-c', shell_script], stdin=open('/etc/fstab', 'r')))

, который печатает несколько строк типа '/ xyz NOT mount', и я хотел бы сохранить его в переменной, как это делает лямбда-функция.

out = lambda: print("/xyz NOT mounted")
out()

Затем мне нужно было бы использовать эту переменную для записи оператора if, как если бы out содержал какую-либо строку, тогда print содержал бы строку, иначе ничего не содержал

Ответы [ 4 ]

1 голос
/ 17 января 2020

Не могли бы вы попробовать, протестировали и написали в Python2 .7

#!/usr/bin/python
import re
out="/xyz NOT mounted"
if re.search(r'[a-zA-Z]+', out):
    print "String found."
else:
    print "String NOT found."

Когда значение переменной out имеет строковые значения, оно печатает String found.



Теперь давайте проверим это с NULL значением переменной val здесь.

cat script.py
#!/usr/bin/python
import re
out=""
if re.search(r'[a-zA-Z]+', out):
    print "String found."
else:
    print "String NOT found."

Когда мы бежим выше, тогда это дает как String NOT found.

0 голосов
/ 17 января 2020

Здесь приведен пример выполнения команды с использованием подпроцесса и сохранения и вывода / буферизации данных в переменной.

Пример:

Command_Input = subprocess.Popen("Your Command",stdin=process_output.stdout, stdout=subprocess.PIPE, shell=True)
Command_Output = Command_Input.communicate()[0]
Print(Command_Output)
0 голосов
/ 17 января 2020

Разве вы не можете просто сохранить переменную и затем напечатать ее?

 x = subprocess.check_output()
 print(x)

 #and then...
 if x == ???:
    #do something

Сохранение переменной и ее печать кажутся намного проще, чем пытаться захватить вывод операторов print.

0 голосов
/ 17 января 2020

Я не могу запустить ваш код на моей машине, потому что мне не хватает части shell_script.

Для подобных случаев я использую subprocess.PIPE и собираю выходные строки в список, который вы можете повторить и проверить позже:

import subprocess

def bash_command(cmd):
    sp = subprocess.Popen(['/bin/bash', '-c', cmd], stdout=subprocess.PIPE)
    return sp.stdout.readlines()

result = bash_command('ls') # Insert here your bash command

for line in result:
    if "NOT mounted" in line:
        print("Hey I have a line containing NOT mounted")
    else:
        print("Hey I have a line not containing NOT mounted")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...