【问题标题】:Unable to cast int from b'0\n'无法从 b'0\n' 转换 int
【发布时间】:2015-02-07 05:29:05
【问题描述】:

我使用paramiko ssh 在远程计算机上运行cat /tmp/file,其中包含一个数字。

这个数字需要和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''

如何在我的if 中使用int 值,在本例中为0

【问题讨论】:

  • 不是b'0\n',而是一个空字节串b''int(b'0\n') 工作。
  • 您打印的内容不正确。 print errlvl
  • stdout.read() 移动文件指针,如果你再次调用它,你将一无所获。

标签: python casting int byte paramiko


【解决方案1】:

代码调用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:
    ...

【讨论】:

    【解决方案2】:

    这个:

    stdout.read()
    

    会得到你b'0\n';但是第二个 stdout.read() 会给你一个空字符串,因为第一个read() 已经读取了0read() 不是从头开始读取,而是从最后离开的位置读取。

    这也是错误所说的:

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

    b'',而不是b'0\n

    所以你需要做的是调用read() 一次,然后立即将其存储在一个变量中。

    【讨论】:

      【解决方案3】:

      您从 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:
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-21
        • 2015-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 2013-02-28
        相关资源
        最近更新 更多