Выполнить команду на удаленной машине в Python

Я пишу программу на python на Ubuntu, чтобы выполнить команду ls -l на RaspberryPi, подключиться к сети.

Может ли кто-нибудь научить меня, как мне это сделать?

2 Solutions collect form web for “Выполнить команду на удаленной машине в Python”

Конечно, есть несколько способов сделать это!

Допустим, у вас есть малина Pi на хосте raspberry.lan и ваше имя пользователя irfan .

подпроцесс

Это стандартная библиотека Python, которая запускает команды.
Вы можете заставить его запустить ssh и делать все, что вам нужно на удаленном сервере.

в его ответе он замаскирован. Вы определенно должны это сделать, если не хотите использовать сторонние библиотеки.

Вы также можете автоматизировать ввод пароля / парольной фразы с помощью pexpect .

paramiko

paramiko – это сторонняя библиотека, которая добавляет поддержку SSH-протокола, поэтому она может работать как SSH-клиент.

Пример кода, который будет подключаться к серверу, выполнять и захватывать результаты команды ls -l будет выглядеть так:

 import paramiko client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect('raspberry.lan', username='irfan', password='my_strong_password') stdin, stdout, stderr = client.exec_command('ls -l') for line in stdout: print line.strip('\n') client.close() 

ткань

Вы также можете добиться этого с помощью fabric .
Ткань – это инструмент развертывания, который выполняет различные команды на удаленных серверах.

Он часто используется для запуска файлов на удаленном сервере, поэтому вы можете легко разместить свою последнюю версию веб-приложения, перезапустить веб-сервер и многое другое с помощью одной команды. На самом деле, вы можете запустить ту же команду на нескольких серверах, что является удивительным!

Хотя это было сделано как инструмент развертывания и удаленного управления, вы все равно можете использовать его для выполнения основных команд.

 # fabfile.py from fabric.api import * def list_files(): with cd('/'): # change the directory to '/' result = run('ls -l') # run a 'ls -l' command # you can do something with the result here, # though it will still be displayed in fabric itself. 

Это похоже на типизацию cd / и ls -l на удаленном сервере, поэтому вы получите список каталогов в корневой папке.

Затем запустите в оболочке:

 fab list_files 

Появится запрос на адрес сервера:

 No hosts found. Please specify (single) host string for connection: irfan@raspberry.lan 

Быстрая заметка : вы также можете назначить имя пользователя и хост прямо в команде fab :

 fab list_files -U irfan -H raspberry.lan 

Или вы можете поместить хост в переменную env.hosts в ваш файл. Вот как это сделать .


Затем вам будет предложено ввести пароль SSH:

 [irfan@raspberry.lan] run: ls -l [irfan@raspberry.lan] Login password for 'irfan': 

И тогда команда будет успешно запущена.

 [irfan@raspberry.lan] out: total 84 [irfan@raspberry.lan] out: drwxr-xr-x 2 root root 4096 Feb 9 05:54 bin [irfan@raspberry.lan] out: drwxr-xr-x 3 root root 4096 Dec 19 08:19 boot ... 

Простой пример отсюда :

 import subprocess import sys HOST="www.example.org" # Ports are handled in ~/.ssh/config since we use OpenSSH COMMAND="uname -a" ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) result = ssh.stdout.readlines() if result == []: error = ssh.stderr.readlines() print >>sys.stderr, "ERROR: %s" % error else: print result 

Он делает именно то, что вам нужно: подключается через ssh, выполняет команду, возвращает результат. Третьей стороне библиотеки не требуется.

  • Обработка Python socket.error: Сброс соединения с помощью одноранговой сети
  • Обновите до numpy 1.8.0 на Ubuntu 12.04
  • Как использовать numpy с OpenBLAS вместо Atlas в Ubuntu?
  • Эффективный способ преобразования документа в формат PDF
  • Не удалось импортировать ssl на linux
  • WxPython: PyInstaller не работает с Нет модуля с именем _core_
  • Как программно изменить объем в Ubuntu
  • Bash: Как обновить оболочку после установки virtualenvwrapper ?
  • Установка модулей python на Ubuntu
  • Установка тензорного потока на Ubuntu 14.04
  • Колба разбитая труба с запросами
  • Python - лучший язык программирования в мире.