102 시뮬레이션 ssh 원격 실행 명령
1.subprocess 모듈
프로세스 모듈은 새로운 프로세스를 만들어서 다른 프로그램을 실행하고 통신하며 표준 입력, 표준 출력, 표준 오류, 복귀 코드 등을 가져올 수 있도록 합니다.자세한 내용은 홈페이지를 참조하십시오.https://docs.python.org/2/library/subprocess.html?highlight=subprocess#frequently-used-arguments
subprocess 모듈을 통해 명령을 실행할 수 있습니다
1.1 사용 방법
명령을 실행하고, 실행된 정확한 결과를 파이프에 넣고, 실행 잘못된 결과도 파이프에 넣는다
obj=subprocess.Popen( , shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
주의: 결과의 인코딩은 현재 있는 시스템을 기준으로 합니다. 윈도우즈라면res.stdout.read()가 읽는 것은 바로 GBK 인코딩이다. 수신자에서 GBK 인코딩을 해야 한다. 이른바 어떤 형식으로 인코딩하면 그 형식으로 인코딩하는 것이다.
# subprocess
import subprocess
#
obj=subprocess.Popen('tasklist',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# ,
ss=obj.stdout.read()
err=obj.stderr.read()
print(' ',str(err,encoding='gbk'))
# windows gbk , gbk
print(str(ss,encoding='gbk'))
2. SSH 원격 실행 명령을 시뮬레이션한다.
서버
import socket
import subprocess
HOST = "192.168.11.237"
PORT = 8081
soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
soc.bind((HOST,PORT))
soc.listen(5)
while 1:
print(" 。。。")
conn,addr = soc.accept()
print(" 。。。
")
while 1:
try:
data = conn.recv(1024)
if len(data)==0: # 0 。 windows , linux
break
#
obj = subprocess.Popen(str(data,encoding="utf8"),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# b ,gbk (windows )
suc_msg = obj.stdout.read()
if suc_msg:
conn.send(suc_msg)
else:
fail_msg = obj.stderr.read()
conn.send(fail_msg)
except:
print(" 。。。")
break
conn.close()
soc.close()
클라이언트
import socket
HOST = "192.168.11.237"
PORT = 8081
soc = socket.socket()
soc.connect((HOST,PORT))
while 1:
cmd = input(" ")
soc.send(cmd.encode("utf8"))
data = soc.recv(1024)
print(data.decode("gbk"))
dir
명령을 입력하면 서버에서 보내는 바이트가 1024바이트보다 적기 때문에 클라이언트가 받아들일 수 있습니다.tasklist
명령을 입력하면 서버에서 보내는 바이트가 1024바이트보다 많기 때문에 클라이언트는 일부 데이터만 받아들일 수 있고 dir
명령을 다시 입력할 때 클라이언트는 dir
명령의 결과를 받아들일 수 있지만 지난번의 나머지 발송되지 않은 데이터를 출력할 수 있습니다. 이것이 바로 패키지 문제입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.