回答
当然,有几种方法可以做到这一点!
假设您的raspberry.lan
主机上有Raspberry Pi,并且您的用户名是irfan
。
子流程
这是运行命令的默认Python库。
您可以使其运行ssh
并在远程服务器上执行任何您需要的操作。
scrat has it covered in his answer。如果你不想使用任何第三方库,你绝对应该这样做。
您还可以使用pexpect
自动输入密码/密码。
的paramiko
paramiko
是一个第三方库,增加了SSH协议支持,所以它可以工作像一个SSH客户端。
的示例代码,将连接到服务器,执行和抢ls -l
命令的结果看起来就像是:
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('raspberry.lan', username='irfan', password='my_strong_password')
stdin, stdout, stderr = client.exec_command('ls -l')
for line in stdout:
print line.strip('\n')
client.close()
面料
您也可以使用fabric
实现它。
Fabric是一种在远程服务器上执行各种命令的部署工具。
它经常被用来在远程服务器上运行的东西,所以你可以很容易地用一个命令把你的最新版本的Web应用程序,重新启动web服务器和诸如此类的东西。实际上,您可以在多台服务器上运行相同的命令,这非常棒!
尽管它是作为部署和远程管理工具制作的,但您仍然可以使用它来执行基本命令。
# fabfile.py
from fabric.api import *
def list_files():
with cd('/'): # change the directory to '/'
result = run('ls -l') # run a 'ls -l' command
# you can do something with the result here,
# though it will still be displayed in fabric itself.
这就像在远程服务器上键入,cd /
和ls -l
,所以你会得到你的根文件夹的目录列表。
然后在shell中运行:
fab list_files
它会提示输入服务器地址:
No hosts found. Please specify (single) host string for connection: [email protected]
快速注意:您还可以分配用户名和主机在fab
指令中:
fab list_files -U irfan -H raspberry.lan
或者您可以将一个主机放入您的fabfile中的env.hosts
变量。 Here's how to do it。
然后你会被提示输入SSH密码:
[[email protected]] run: ls -l
[[email protected]] Login password for 'irfan':
然后在命令将成功运行。从here
[[email protected]] out: total 84
[[email protected]] out: drwxr-xr-x 2 root root 4096 Feb 9 05:54 bin
[[email protected]] out: drwxr-xr-x 3 root root 4096 Dec 19 08:19 boot
...
简单的例子:
import subprocess
import sys
HOST="www.example.org"
# Ports are handled in ~/.ssh/config since we use OpenSSH
COMMAND="uname -a"
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
error = ssh.stderr.readlines()
print >>sys.stderr, "ERROR: %s" % error
else:
print result
它做你想要什么:连接通过SSH,执行命令,返回的输出。没有第三方库需要。
当我使用这个命令=“ls -l”,其结果是在一行中,意味着不可读,但它工作 – 2015-02-09 15:57:59
@ IrfanGhaffar7这是因为'结果'是一个列表,而不是串。你可以做'print''.join(result)'而不是使它看起来可读。 – 2015-02-09 16:09:50
谢谢....现在确定 – 2015-02-09 16:35:30
- 1. Python如何在远程机器上执行命令并等待执行完成?
- 2. SSH远程机器和执行命令
- 3. 在远程windows机器上执行命令,并在Python中获取输出
- 4. 在远程机器上执行多个命令
- 5. C++:在Windows机器上远程执行命令
- 6. 在远程机器上执行shell命令
- 7. power-shell命令行在远程计算机上执行cmd
- 8. 命令not found.when在远程主机上执行bash时
- 9. 期望ssh脚本(在远程计算机上执行命令)
- 10. 如何在远程计算机上执行命令?
- 11. linux远程执行命令
- 12. 远程docker命令执行
- 13. 远程服务器命令执行
- 14. 在远程机器上执行EXE
- 15. 在远程计算机上使用wmi python执行系统命令
- 16. 在远程服务器上执行本地脚本/命令
- 17. golang:在远程服务器上执行shell命令
- 18. 如何使用shell脚本在远程机器上执行linux命令
- 19. root用户没有在远程机器的shell脚本中执行命令
- 20. 在python程序中执行linux命令
- 21. SSH远程命令执行和的ulimit
- 22. 从命令行通过capistrano在远程主机上运行命令
- 23. 在linux上,使用NFS,是远程执行的open()命令吗?
- 24. 如何在远程系统上执行BASH脚本的命令?
- 25. 使用Java在远程计算机上运行命令行
- 26. Rails应用程序在远程计算机上运行命令
- 27. 仅在本地机器上的GUI上执行shell命令
- 28. 在远程计算机上执行shell脚本中的命令并在本地计算机上获取输出
- 29. 如何在远程服务器上运行命令行程序
- 30. 远程执行命令 - 无等待
如何安装它 – 2015-02-09 14:29:38
@ IrfanGhaffar7您可以使用'pip'或'easy_install'安装第三方Python库。所以它会是'pip安装结构'。检查文档(我链接到面料和paramiko文档),它有快速入门和教程! – 2015-02-09 14:31:20
我的远程机器主机名是'Pi @ 192.168.2.34',密码是'raspberrypi'。当它提示你输入一个主机名时,我怎么在织物 – Fahadkalis 2015-02-09 14:40:15