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

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

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

  • Нет модуля с именем «pymysql»
  • Как установить poppler в ubuntu 15.04?
  • Python ImportError не может импортировать urandom. Обновление Ubuntu 12.04
  • Нужна помощь при запуске приложения Python в качестве службы в Ubuntu с помощью Upstart
  • Проблема с запуском python из crontab - «неправильная установка Python»
  • Ошибка импорта модуля Pyinstaller QtCore
  • Ошибка python_2_unicode_compatible
  • У меня Python на моей системе Ubuntu, но gcc не может найти Python.h
  • 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 - лучший язык программирования в мире.