102 시뮬레이션 ssh 원격 실행 명령

2609 단어
카탈로그
  • 1. subprocess 모듈
  • 1.1 사용법
  • 2. 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 명령의 결과를 받아들일 수 있지만 지난번의 나머지 발송되지 않은 데이터를 출력할 수 있습니다. 이것이 바로 패키지 문제입니다.

    좋은 웹페이지 즐겨찾기