Tôi đang viết chương trình bằng python trên Ubuntu, để thực hiện lệnh ls -l
trên RaspberryPi, kết nối với Mạng.Thực thi lệnh trên Máy từ xa bằng Python
Ai đó có thể hướng dẫn tôi cách tôi làm điều đó không?
Tôi đang viết chương trình bằng python trên Ubuntu, để thực hiện lệnh ls -l
trên RaspberryPi, kết nối với Mạng.Thực thi lệnh trên Máy từ xa bằng Python
Ai đó có thể hướng dẫn tôi cách tôi làm điều đó không?
Chắc chắn, có một số cách để thực hiện!
Giả sử bạn có Raspberry Pi trên máy chủ raspberry.lan
và tên người dùng của bạn là irfan
.
Thư viện Python mặc định chạy lệnh.
Bạn có thể làm cho nó chạy ssh
và làm bất cứ điều gì bạn cần trên một máy chủ từ xa.
scrat has it covered in his answer. Bạn chắc chắn nên làm điều này nếu bạn không muốn sử dụng bất kỳ thư viện của bên thứ ba nào.
Bạn cũng có thể tự động hóa mật khẩu/cụm mật khẩu nhập bằng cách sử dụng pexpect
.
paramiko
là một thư viện của bên thứ ba mà bổ sung hỗ trợ SSH-giao thức, vì vậy nó có thể làm việc như một SSH-client.
Ví dụ mã mà sẽ kết nối đến máy chủ, thực hiện và lấy kết quả của lệnh ls -l
sẽ trông như thế:
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()
Bạn cũng có thể đạt được nó bằng cách sử fabric
.
Vải là công cụ triển khai thực thi các lệnh khác nhau trên máy chủ từ xa.
Nó thường được sử dụng để chạy nội dung trên máy chủ từ xa, do đó bạn có thể dễ dàng đặt phiên bản mới nhất của ứng dụng web, khởi động lại máy chủ web và không có lệnh nào. Trên thực tế, bạn có thể chạy cùng một lệnh trên nhiều máy chủ, điều này thật tuyệt vời!
Mặc dù nó đã được thực hiện như một công cụ quản lý và triển khai từ xa, bạn vẫn có thể sử dụng nó để thực thi các lệnh cơ bản.
# 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.
Nó giống như gõ cd /
và ls -l
trong máy chủ từ xa, do đó bạn sẽ nhận được danh sách các thư mục trong thư mục gốc của bạn.
Sau đó chạy trong vỏ:
fab list_files
Nó sẽ nhắc nhở cho một địa chỉ máy chủ:
No hosts found. Please specify (single) host string for connection: [email protected]
Một lưu ý nhanh chóng: Bạn cũng có thể gán tên người dùng và một loạt ngay trong một lệnh fab
:
fab list_files -U irfan -H raspberry.lan
Hoặc bạn có thể đặt máy chủ lưu trữ vào biến số env.hosts
trong fabfile của bạn. Here's how to do it.
Sau đó, bạn sẽ được nhắc nhập một mật khẩu SSH:
[[email protected]] run: ls -l
[[email protected]] Login password for 'irfan':
Và sau đó lệnh sẽ được chạy thành công.
[[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
...
đơn giản ví dụ từ here:
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
Nó thực hiện chính xác những gì bạn muốn: kết nối qua ssh, thực hiện lệnh, trả về đầu ra. Không cần thư viện của bên thứ ba.
khi tôi sử dụng COMMAND này = "ls -l", kết quả của nó là trong một dòng, có nghĩa là không thể đọc được nhưng nó đang làm việc –
@ IrfanGhaffar7 đó là vì 'result' là một danh sách, không phải là một chuỗi. Bạn có thể làm 'in '' .join (kết quả)' thay vào đó để làm cho nó có thể đọc được. –
Cảm ơn .... nó là ok bây giờ –
làm cách nào để cài đặt nó –
@ IrfanGhaffar7 bạn có thể cài đặt thư viện Python của bên thứ ba bằng cách sử dụng 'pip' hoặc' easy_install'. Vì vậy, nó sẽ là 'pip install fabric'. Kiểm tra tài liệu (tôi liên kết với cả vải và tài liệu paramiko), nó có quickstarts và hướng dẫn! –
tên máy chủ từ xa của tôi là 'Pi @ 192.168.2.34' và mật khẩu là 'raspberrypi'. Làm thế nào để tôi đề cập đến những thông tin trên Fabric – Fahadkalis