Python Paramiko - 将“iperf -s”发送到 Linux 服务器时出现问题

问题描述 投票:0回答:1

我需要使用Python程序将命令

iperf -s
发送到Linux服务器。命令未发送。问题的时间顺序如下:

  1. 我正在向服务器发送命令
    iperf -s
    。什么也没发生,程序冻结(我没有停止程序)。
  2. 我使用
    netstat -tupln
    检查进程。服务器上创建了一个进程
    iperf
    ,但什么也没发生。
  3. 如果我用
    sudo kill -9 <PID>
    终止此进程,则当执行
    iperf -s
    并且程序退出时,程序将输出传统输出。
  4. 如果我再次检查进程,
    iperf
    进程不存在。

这是我的代码:

remote_server = "172.22.94.171"
client = paramiko.client.SSHClient()
username = "useruser"
password = "password"

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(remote_server, port=22, username=username, password=password)

stdin, stdout, stderr = client.exec_command('sudo iperf -s', get_pty=True)

stdin.write(password+'\n')

print(stdout.readlines())
python ssh paramiko
1个回答
0
投票

我正在向服务器发送命令

iperf -s
。什么也没发生,程序冻结(我没有停止程序)。

它不会冻结。

iperf -s
将作为服务器在前台运行。它正在等待 iperf 客户端连接,因此
iperf -s
不会立即退出。
stdout.readlines()
将读取所有数据直到 EOF,但由于
iperf -s
尚未退出,因此
stdout.readlines()
只会阻塞在那里等待 EOF。

我使用

netstat -tupln
检查进程。服务器上创建了一个iperf进程,但是没有任何反应。

netstat
输出所示的过程就是
iperf -s
服务器。

如果我使用 sudo Kill -9 终止此进程,则当执行

iperf -s
并且程序退出时,程序将输出传统输出。

你杀了它,

iperf -s
就死了。然后
stdout.readlines()
到达EOF并返回。


要在后台启动

ieprf
服务器,请使用
iperf --daemon -s

© www.soinside.com 2019 - 2024. All rights reserved.