要读取一些文本文件,在C或Pascal中,我总是使用以下代码段来读取数据,直到EOF:
while not eof do begin
readline(a);
do_something;
end;
Run Code Online (Sandbox Code Playgroud)
因此,我想知道如何在Python中简单快速地完成这项工作?
我需要循环,直到我到达类似文件的对象的末尾,但我没有找到"明显的方法去做",这让我怀疑我忽略了一些东西,很明显.:-)
我有一个流(在这种情况下,它是一个StringIO对象,但我也对一般情况感到好奇)以"<length> <data>"格式存储未知数量的记录,例如:
data = StringIO("\x07\x00\x00\x00foobar\x00\x04\x00\x00\x00baz\x00")
Run Code Online (Sandbox Code Playgroud)
现在,我能想象的唯一清晰的方法就是使用(我认为是)一个初始化的循环,这看起来有点像非Pythonic:
len_name = data.read(4)
while len_name != "":
len_name = struct.unpack("<I", len_name)[0]
names.append(data.read(len_name))
len_name = data.read(4)
Run Code Online (Sandbox Code Playgroud)
在一个类似C语言,我只是坚持的read(4)中while的测试条款,但当然不会对Python的工作.有没有想过更好的方法来实现这个目标?
那么在Paramiko上SSHClient.exec_command()发送和发送有什么区别SSHClient.invoke_shell?
我可以使用exec_commandMikroTik 路由器设备发送和执行命令,但无法使用send( invoke_shell())执行它。
另一方面,我可以向Cisco 设备发送和执行命令send( invoke_shell()),但不能使用exec_command.
我的意思是配置命令,如路由(ip route xxx xxx)或make vlan或添加ip地址等。
我干了一个 Python 脚本。我为给定的 IP 创建了一个 Python 脚本,它将通过 Paramiko 连接到服务器以执行另一个 Python 脚本。
这是一些代码:
self._client = paramiko.SSHClient()
self._client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self._client.connect(self._ip, username=self._server['username'], password=self._server['password'])
channel = self._client.get_transport().open_session()
channel.exec_command('python3 /tmp/scrap.py /tmp/' + self._ip + '.txt 0 1')
Run Code Online (Sandbox Code Playgroud)
脚本“scrap.py”每 X 秒在远程机器的控制台中返回一行,但是我无法在上面脚本中的这些行中恢复(在 exec_command (. ..) 的退出时)。
这是可能的,如果是,你知道怎么做吗?
先感谢您。