Подпроцесс Python для выполнения команд удаленного сервера

1

Я должен выполнить скрипт python, который находится на удаленном компьютере, и я использую скрипт ниже:

from subprocess import call
ip = 1.1.1.1
call(["ssh", ip, "\"cd scripts; python -u get_details.py --web_server\""])

ниже ошибки:

bash: cd scripts; python -u get_details.py --web_server: command not found

запуск в командной строке bash:

 ssh 1.1.1.1 "cd scripts; python -u get_details.py --web_server"

Запрос ниже ввода и возврата вывода

 1. USA
 2. UK
 Choose input: 1

 www.cisco_us.com is up 

Пожалуйста, позвольте мне, как исправить или любой другой лучший способ добиться этого в python

Теги:
python-2.7
subprocess

2 ответа

2
Лучший ответ

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

ssh 1.1.1.1 "cd scripts; python -u get_details.py --web_server"

эквивалентно:

call(["ssh", ip, "cd scripts; python -u get_details.py --web_server"])

Если вы используете call таким образом, на стороне клиента не задействована оболочка (что хорошо), только на стороне сервера.

0

Способ убедиться, что ваши аргументы всегда правильно подготовлены, - это использовать модуль python shlex. Вы можете сделать следующее:

import shlex
import subprocess

ip = '1.1.1.1'
cmd = "ssh {} 'cd scripts; python -u get_details.py --web_server'".format(ip)

subprocess.call(shlex.split(cmd))

Это гарантирует, что ваши аргументы правильно подготовлены.


Я также рекомендую вам взглянуть на Парамико. Это библиотека python, которая помогает вам управлять соединениями SSH.

  • 0
    Какой метод лучший и надежный? Paramiko или настройте ssh без пароля и используйте подпроцесс
  • 0
    Я бы порекомендовал Paramiko. У вас больше контроля, и это, вероятно, более безопасно.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню