автоматизированный скрипт на Python через VM - PullRequest
0 голосов
/ 29 августа 2018

Я новичок в ИТ-компании, и мало кто здесь знает Python, поэтому я не могу тогда обратиться за помощью.

Проблема: мне нужно создать скрипт на Python, который подключается через ssh от моей виртуальной машины к моему клиентскому серверу, после доступа к моему скрипту мне нужно найти файл журнала и найти несколько данных.

Я проверил свой скрипт в моей Windows с копией этого файла, и он искал все, что мне нужно. Однако я не знаю, как сделать это соединение через SSH.

Я пытался так, но не знаю с чего начать:

 from subprocess import Popen, PIPE
 import sys 

 ssh = subprocess.check_output(['ssh', 'my_server', 'password'], shell = True)
 ssh.stdin.write("cd /path/")
 ssh.stdin.write("cat file | grep err|error")

Это приводит к ошибке «имя« подпроцесс »не определен». Я не понимаю, как использовать подпроцесс, и как начать разработку решения.

Примечание: я не могу использовать Paramiko, потому что у меня нет разрешения устанавливать пакеты через pip или загружать пакет вручную.

1 Ответ

0 голосов
/ 04 сентября 2018

Вы сами не импортировали subprocess, поэтому вы не можете ссылаться на него.

check_output просто запускает процесс и ожидает его завершения, поэтому вы не можете использовать его для запуска процесса, с которым хотите взаимодействовать. Но здесь нет ничего интерактивного, поэтому давайте использовать это на самом деле.

Первый аргумент subprocess.Popen() и друзей - это либо строка для разбора оболочки, с shell=True; или список токенов, переданных непосредственно в exec без использования оболочки. (На некоторых платформах передача списка токенов с shell=True действительно работает, но это случайно и может измениться в будущей версии Python.)

ssh myhost password попытается выполнить команду password на myhost, так что это не то, что вам нужно. Вероятно, Вы должны просто настроить вещи для SSH без пароля.

... Но вы можете использовать этот синтаксис для запуска команд за один раз; просто передайте команды оболочки в ssh в виде строки.

from subprocess import check_output
#import sys                          # Remove unused import

 result = check_output(['ssh', 'my_server',
     # Fix quoting and Useless Use of Cat, and pointless cd
     "grep 'err|error' /path/file"])
...