2014-12-09 4 views
0

Я использую paramiko ssh для запуска cat /tmp/file на удаленном компьютере, который содержит одну цифру.Невозможно лить int из b'0 n '

Эта цифра должна быть по сравнению с 0.

stdin, stdout, stderr = client.exec_command('cat /tmp/file') 
print("stdout:") 
print(stdout) 
print("\nstdout.read():") 
print(stdout.read()) 
print("\nif not int(errlvl) == 0:") 
errlvl = stdout.read() 
if not int(errlvl) == 0: 

Выход:

stdout: 
<paramiko.ChannelFile from <paramiko.Channel 35 (open) window=2097152 -> <paramiko.Transport at 0x2b36750 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>> 

stdout.read(): 
b'0\n' 

int(stdout.read()) 
Traceback (most recent call last): 
[...] 
    if not int(errlvl) == 0: 
ValueError: invalid literal for int() with base 10: b'' 

Как я могу использовать значение int, в этом случае 0, в моем if?

+2

Это не 'b'0 \ n'', это пустая байтовая строка' b'''. 'int (b'0 \ n ')' работает. – wim

+0

Вы не печатаете правильную вещь. 'print errlvl' –

+2

' stdout.read() 'перемещает указатель файла, если вы его еще раз вызовете, вы ничего не получите. – tamasgal

ответ

3

Код звонка stdout.read дважды; в результате чего второе считывание возвращает пустые байты.

Прочтите один раз и храните его где-нибудь и повторно используйте.

stdin, stdout, stderr = client.exec_command('cat /tmp/file') 
print("stdout:") 
print(stdout) 
print("\nstdout.read():") 
errlvl= stdout.read() # <----- 
print(errlvl) 
print("\nif not int(errlvl) == 0:") 
if not int(errlvl) == 0: 
    ... 
1

Это:

stdout.read() 

получит Вас b'0\n'; но второйstdout.read() доставит вам пустую строку, потому что первый read() уже прочитал 0. read() не читается с самого начала, а где он последний раз.

Это также то, что ошибка говорит:

invalid literal for int() with base 10: b'' 

b'', не b'0\n.

так что вам нужно сделать, это позвонить read() один раз и сразу же сохранить это в переменной.

1

Вы читаете из stdout дважды, оставляя второе чтение пустым вместо вашего ожидаемого значения «0 \ n». Сделайте это так:

stdin, stdout, stderr = client.exec_command('cat /tmp/file') 
print("stdout:") 
print(stdout) 
print("\nstdout.read():") 
errlvl = stdout.read() 
print(errlvl) 
print("\nif not int(errlvl) == 0:") 
if not int(errlvl) == 0: 
Смежные вопросы