我使用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''
如何在我的int
中使用0
值,在本例中为if
?
答案 0 :(得分: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 :(得分:1)
此:
stdout.read()
会得到你b'0\n'
;但 second stdout.read()
会为您提供一个空字符串,因为第一个read()
已经读取了0
。 read()
从一开始就没有读过,但是它最后一次离开了。
这也是错误所说的:
invalid literal for int() with base 10: b''
b''
,而不是b'0\n
。
所以您需要做的就是调用read()
一次,然后立即将其存储在变量中。
答案 2 :(得分: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: