выполнить команду git на удаленной машине с помощью paramiko

#python #git #ssh #paramiko

#python #git #ssh #paramiko

Вопрос:

Я написал код для выполнения команды git на удаленном сервере, но я так и не выполнил

Шаг 1: Войдите на удаленный сервер
Шаг 2: измените каталог на репозиторий git
Шаг 3: выполните команду git clean -fdx

Ниже приведен пример кода

 try:
        ssh = paramiko.SSHClient()
        sssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(dummyipaddress, username="john", password="philips")
except (paramiko.BadHostKeyException,
        paramiko.AuthenticationException, paramiko.SSHException) as e:
        print str(e)
        sys.exit(-1)
try:
        channel = ssh.get_transport().open_session()
        channel.send("cd /path to git dir"  'n')
        time.sleep(5)
        print channel.recv(1024)
        channel.send("git clean -fdx" 'n')
        print chan.recv(1024)
except paramiko.SSHException as e:
        print str(e)
        sys.exit(-1)
  

Но проблема в том, что я могу перейти в репозиторий git, но не могу выполнить команду git

Комментарии:

1. я ничего не получаю в channel.recv()

Ответ №1:

Вам необходимо запустить оболочку перед отправкой команд оболочки:

 channel = ssh.get_transport().open_session()
channel.get_pty()         # get a PTY
channel.invoke_shell()    # start the shell before sending commands
channel.send("cd /path to git dir"  'n')
time.sleep(5)
print channel.recv(1024)
channel.send("git clean -fdx" 'n')
print chan.recv(1024)
  

Комментарии:

1. Привет, почему, если я хочу добавить еще один канал.отправьте («git reset —hard»), как я сделаю это для меня после того, как 2 команды, 3-я команда не выполняется

2. channel.send("git reset --hard") — Вы чего-то не понимаете n .

3. я поместил channel.send(«git reset —hard» ‘ n’) после выполнения 2-й команды вывод был на >

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