Python paramiko 脚本,在 exec_command() 期间读取输出时出现问题

标签 python ssh paramiko

背景: 我正在使用 python 和 paramiko 来自动化我每次必须为类(class)提交程序时所经历的过程。我们使用名为“handin”的命令来提交源代码,但这必须在学校计算机上完成。所以当我从家里提交代码时,我必须:sftp 进入学校服务器,将文件放在目录中,ssh 进入学校计算机,使用'handin'命令

我可以成功地将文件放到学校的机器上。当我尝试使用 exec_command('handin my files') 然后读取输出以确定下一步操作时出现问题。

所以我有

try:
   (stdin, stdout, stderr) = client.exec_command(s)
except:
   print 'whoops'
   sys.exit()
print stdout.readlines()

但是由于某种原因这会导致死锁,脚本似乎什么都不做,我最终不得不终止整个进程(ctrl+c 不起作用)。我不确定 exec_command 是否没有正确完成(即使它正在退出 try/catch block )或者我是否遇到网络问题或其他问题。

有什么想法吗?

更新:

问题在于在执行期间与 handin 命令交互。执行命令后,handin 可能仍在运行,也可能不在运行。如果它是第一次提交它说成功,等等等等,然后完成执行。一切都很好。但是,如果我重新提交,我必须为每个文件授权覆盖 (stdin.write('y'))。

TL/DR:

如何检查 exec_command() 是否仍在运行,等待输入,并相应地从 stdout 读取 readline()?

最佳答案

我没有发现上面的代码片段有任何问题。下面的程序是一个完整的脚本,它登录到主机并运行 ls 命令来查看文件。我刚刚试过了,它对我有用。也许试试这个,看看它是否适合你。如果它不起作用,我怀疑某些特定于您的 ssh 服务器、您正在运行的命令或 paramiko 安装的问题。如果它对您有用,只需对此进行更改以转向您现有的功能并查看它在哪里中断。

import paramiko
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('<ip address here>',username='<username here>',password='<password here>')
stdin,stdout,stderr = ssh.exec_command("ls /")
print stdout.readlines()

如果这对您有用,我的下一个建议是尝试用您尝试运行的实际 handin 命令替换“ls/”。可能命令挂起等待用户输入等。

关于Python paramiko 脚本,在 exec_command() 期间读取输出时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7680343/

相关文章:

git - 如何从第一个 github 帐户切换到第二个?

python - paramiko和python ssh

python - Huggingface 分类与预测作斗争

python - 文件爬虫OSError

python - 将 I2C 传感器 (DS1624) 读数转换为数字

linux - 运行! less.sh 中的变量

shell - 通过ssh通过标准输入输入sudo密码是否存在安全风险?

Python 进程由于打开 Paramiko ssh 连接而挂起

paramiko - sftp.get python paramiko [没有这样的文件]

python - 如何在抓取之前从数据库获取 url 和行 id 以在管道中使用它来存储数据?