paramiko. ответы на вопросы, заданные оборудованием [дубликат]

A NullReferenceException бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.

Например:

  1. При использовании метода string пустой строки:
    string str = string.Empty;
    str.ToLower(); // throw null reference exception
    
  2. Когда свойство нулевого объекта доступно:
    Public Class Person {
        public string Name { get; set; }
    }
    Person objPerson;
    objPerson.Name  /// throw Null refernce Exception 
    
31
задан shahjapan 20 December 2011 в 12:51
поделиться

6 ответов

Полное распределение paramiko поставляется с большим количеством хороших демонстраций .

В поддиректории demos demo.py и interactive.py есть полные интерактивные примеры TTY, которые, вероятно, будут

В вашем примере выше ssh_stdin действует как стандартный файловый объект Python, поэтому ssh_stdin.write должен работать, пока канал все еще открыт.

I «Мне никогда не приходилось писать в stdin, но в документах предполагается, что канал закрыт, как только выйдет команда, поэтому использование стандартного метода stdin.write для отправки пароля, вероятно, не будет работать. На самом канале есть команды paramiko более низкого уровня, которые дают вам больше контроля - см., Как метод SSHClient.exec_command реализован для всех деталей gory.

27
ответ дан scy 25 August 2018 в 04:21
поделиться

У меня была та же проблема, что и попытка сделать интерактивный сеанс ssh с использованием ssh , fork of Paramiko.

Я выкопал и нашел эту статью:

http://jessenoller.com/2009/02/05/ssh-programming-with-paramiko-completely-different/

Чтобы продолжить свой пример, вы могли бы сделать

ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("psql -U factory -d factory -f /tmp/data.sql")
ssh_stdin.write('password\n')
ssh_stdin.flush()
output = ssh_stdout.read()

В статье более подробно описывается полностью интерактивная оболочка вокруг exec_command. Я нашел это намного проще в использовании, чем примеры в источнике.

6
ответ дан afrosteve 25 August 2018 в 04:21
поделиться

Вам нужен Pexpect, чтобы получить лучшее из обоих миров (ожидать и ssh-обертки).

4
ответ дан ax25 25 August 2018 в 04:21
поделиться
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server_IP,22,username, password)


stdin, stdout, stderr = ssh.exec_command('/Users/lteue/Downloads/uecontrol-CXC_173_6456-R32A01/uecontrol.sh -host localhost ')
alldata = ""
while not stdout.channel.exit_status_ready():
   solo_line = ""        
   # Print stdout data when available
   if stdout.channel.recv_ready():
      # Retrieve the first 1024 bytes
      solo_line = stdout.channel.recv(1024) 
      alldata += solo_line
   if(cmp(solo_line,'uec> ') ==0 ):    #Change Conditionals to your code here  
     if num_of_input == 0 :
      data_buffer = ""    
      for cmd in commandList :
       #print cmd
       stdin.channel.send(cmd)        # send input commmand 1
      num_of_input += 1
     if num_of_input == 1 :
      stdin.channel.send('q \n')      # send input commmand 2 , in my code is exit the interactive session, the connect will close.
      num_of_input += 1 
print alldata
ssh.close()              

Почему stdout.read () будет зависать, если использовать dierectly, не проверяя stdout.channel.recv_ready (): while, в то время как stdout.channel.exit_status_ready ():

Для моего случая, после run на удаленном сервере, сеанс ожидает ввода пользователем, после ввода «q» он закроет соединение. Но перед вводом «q» stdout.read () будет ожидать EOF, кажется, что этот метод не работает, если буфер больше.

  • Я попробовал stdout.read (1), пока, он работает, я пытался stdout.readline (), пока он работает. stdin, stdout, stderr = ssh.exec_command ('/ Users / lteue / Downloads / uecontrol') stdout.read () будет висеть
3
ответ дан kevin yu 25 August 2018 в 04:21
поделиться

Я не знаком с paramiko, но это может работать:

ssh_stdin.write('input value')
ssh_stdin.flush()

Для получения информации о stdin:

http://docs.python.org /library/sys.html?highlight=stdin#sys.stdin

3
ответ дан monkut 25 August 2018 в 04:21
поделиться

Взгляните на пример и сделайте аналогичным образом

(sorce from http://jessenoller.com/2009/02/05/ssh-programming-with-paramiko-completely- другой / ):

    ssh.connect('127.0.0.1', username='jesse', 
        password='lol')
    stdin, stdout, stderr = ssh.exec_command(
        "sudo dmesg")
    stdin.write('lol\n')
    stdin.flush()
    data = stdout.read.splitlines()
    for line in data:
        if line.split(':')[0] == 'AirPort':
            print line
0
ответ дан Paweł Wojtal 25 August 2018 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: