优草派 > Python

解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题

张鹏         优草派

Python paramiko 模块是Python中用于ssh连接的一个模块,常用于远程执行命令等。但是在使用nohup命令时有可能会出现不生效的问题。本文将从多个角度分析这个问题。

解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题

问题分析:

在使用paramiko模块远程执行ssh命令时,在命令前加上nohup,希望让命令在后台执行,但是实际执行中发现nohup命令并不生效,命令在远程主机执行后会随着连接的关闭而结束。这个问题的主要原因是ssh连接的session结束后,nohup命令中使用的管道(STDIN、STDOUT、STDERR)会被自动关闭,导致命令无法正常执行。那么如何解决这个问题呢?

解决方案:

1. 将命令放到脚本中执行。通过将命令放到脚本中,再通过nohup命令执行脚本,可以避免管道被关闭的问题。

2. 使用popen运行nohup命令。通过使用subprocess.Popen()方法运行nohup命令,可以创建一个与当前程序完全独立的子进程环境,避免管道被关闭的问题,代码示例:

```python

import paramiko

import subprocess

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname='hostname', port=22, username='username', password='password')

command = 'nohup ls -l / > /tmp/test.out &'

ssh.exec_command(command)

stdin, stdout, stderr = ssh.exec_command('cat /tmp/test.out')

for line in stdout:

print('line:', line)

ssh.close()

# run command with popen

popen_command = ['nohup', 'ls', '-l', '/', '>', '/tmp/test.out', '&']

subprocess.Popen(popen_command)

```

3. 使用asyncssh或paramiko-channel解决。paramiko-channel提供了一个类ssh的交互式远程连接方法,可以实现在ssh连接后设置keepalive的机制。而asyncssh则提供了一个高级的异步ssh库,支持高度自定义的异步事件处理。

总结:

通过以上三种解决方案,可以解决Python paramiko模块远程执行ssh命令nohup不生效的问题。其中脚本和popen运行命令的方式比较简单易用,而asyncssh则提供了更高级的异步处理方式。选择哪种方式取决于具体的需求和应用场景。

  • 微信好友

  • 朋友圈

  • 新浪微博

  • QQ空间

  • 复制链接

取消
5天短视频训练营
新手入门剪辑课程,零基础也能学
分享变现渠道,助你兼职赚钱
限时特惠:0元
立即抢
新手剪辑课程 (精心挑选,简单易学)
第一课
新手如何学剪辑视频? 开始学习
第二课
短视频剪辑培训班速成是真的吗? 开始学习
第三课
不需要付费的视频剪辑软件有哪些? 开始学习
第四课
手机剪辑app哪个好? 开始学习
第五课
如何做短视频剪辑赚钱? 开始学习
第六课
视频剪辑接单网站APP有哪些? 开始学习
第七课
哪里可以学短视频运营? 开始学习
第八课
做短视频运营需要会什么? 开始学习
【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。

客服热线:0731-85127885

湘ICP备19005950号-1  

工商营业执照信息

违法和不良信息举报

举报电话:0731-85127885 举报邮箱:tousu@csai.cn

优草派  版权所有 © 2024