Я должен выполнить скрипт 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
Вам нужно отбросить кавычки, потому что оболочка удаляет их. Это:
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
таким образом, на стороне клиента не задействована оболочка (что хорошо), только на стороне сервера.
Способ убедиться, что ваши аргументы всегда правильно подготовлены, - это использовать модуль 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.