cuốn sách gpt4 ai đã làm

使用子流程的 Python 自动化

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:09:00 30 4
mua khóa gpt4 Nike

Tôi là người mới bắt đầu học python và tôi muốn bắt đầu với tự động hóa. Dưới đây là nhiệm vụ tôi đang cố gắng thực hiện.

ssh -p 2024 root@10.54.3.32

Mật khẩu của root@10.54.3.32:

Tôi cố gắng kết nối với một máy cụ thể qua ssh và được nhắc nhập mật khẩu. Nhưng tôi không biết cách cung cấp đầu vào cho bảng điều khiển này. Tôi đã thử cái này

import sys

nhập khẩu quy trình con

con = subprocess.Popen("ssh -p 2024 root@10.54.3.32", shell=True,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr =subprocess.PIPE)

in con.stdout.readlines()

Nếu tôi thực hiện điều này, đầu ra sẽ như thế này

python auto.py

Mật khẩu của root@10.54.3.32:

Nhưng tôi không biết làm thế nào để cung cấp đầu vào cho việc này. Nếu có ai có thể giúp tôi giải quyết vấn đề này, nó sẽ được đánh giá rất cao. Ngoài ra, vui lòng giúp tôi cách thực thi lệnh trên máy từ xa thông qua ssh sau khi đăng nhập.

Nếu hoàn thành, tôi sẽ tiếp tục tự động hóa

我尝试使用 con.communicate(), bởi vì stdin ở mức Chế độ ỐNG. Nhưng không có may mắn.

Nếu điều này không thể thực hiện được thông qua quy trình con, bạn có thể gợi ý cho tôi một cách khác để thực thi lệnh trên bảng điều khiển từ xa (một số mô-đun khác) hữu ích cho việc tự động hóa không? Bởi vì hầu hết quá trình tự động hóa của tôi dựa vào việc thực thi các lệnh trên bảng điều khiển từ xa

Cảm ơn

câu trả lời hay nhất

Tôi đã triển khai nó thông qua mong đợi. Trước khi chạy mã của bạn, bạn có thể muốnmong đợi cài đặt pip:

kỳ vọng nhập khẩu
từ mong đợi nhập pxssh

truy cậpDenied = Không có
không thể truy cập được = Không có
tên người dùng = 'một số người dùng'
ipaddress = 'mymachine'
mật khẩu = 'một số mật khẩu'
lệnh = 'ls -al'
thử:
ssh = pexpect.spawn('ssh %s@%s' % (tên người dùng, ipaddress))
ret = ssh.expect([pexpect.TIMEOUT, '.*sure.*connect.*\(yes/no\)\?', '[P|p]assword:'])
nếu ret == 0:
không thể truy cập = Đúng

elif ret == 1: #Case yêu cầu lưu trữ key
ssh.sendline('có')
ret = ssh.expect([pexpect.TIMEOUT, '[P|p]assword:'])
nếu ret == 0:
truy cậpDenied = Đúng
Elif ret == 1:
ssh.sendline(mật khẩu)
auth = ssh.expect(['[P|p]assword:', '#']) #Match cho lời nhắc
elif ret == 2: #Trường hợp yêu cầu nhập mật khẩu
ssh.sendline(mật khẩu)
auth = ssh.expect(['[P|p]assword:', '#']) #Match cho lời nhắc

nếu không xác thực == 1:
truy cậpDenied = Đúng
khác:
(command_output, exitstatus) = pexpect.run("ssh %s@%s '%s'" % (tên người dùng, ipaddress, lệnh), events={'(?i)password':'%s\n' % mật khẩu }, withexitstatus=1, timeout=1000)
in(lệnh_output)
ngoại trừ pxssh.ExceptionPxssh là e:
in (e)
accessDenied = 'Truy cập bị từ chối'

nếu truy cập bị từ chối:
print('Không thể kết nối với máy')
Elif không thể truy cập được:
print('Không thể truy cập hệ thống')

Điều này chỉ hoạt động trên Linux vì pexpect chỉ hoạt động trên Linux. Nếu bạn cần chạy trên Windows, bạn có thể sử dụng plink.exe. paramiko là một mô-đun khác mà bạn có thể thử, trước đây tôi gặp rất ít vấn đề với nó.

Về tự động hóa Python bằng cách sử dụng các quy trình con, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/40914325/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress