장기 실행 프로그램을 위한 SSH

장기 실행 프로그램을 위한 SSH

원격 컴퓨터에서 작업을 수행하기 위해 Python 스크립트를 작성 중입니다. 실제로 Python 스크립트가 내 컴퓨터에서 실행되고 있고 원격 컴퓨터는 우분투를 실행하는 봇입니다.

내가 내린 명령은 로봇 소프트웨어를 시작하고 종료되지 않습니다(^c를 사용하여 종료하지 않는 한). 다음 20초 동안(또는 "조용"해질 때까지) 출력을 표시하는 명령을 실행한 다음 스크립트가 실제로 완료되도록 하려고 합니다.

저는 ssh 옵션과 함께 subprocess.run(및 변형)을 사용하고 & 기호로 명령을 끝내려고 했습니다. 이들 중 어느 것도 작동하지 않습니다.

지금까지 얻은 내용은 다음과 같습니다(몇 가지 실험적인 대안이 주석 처리되어 있는 것을 볼 수 있습니다). 내가 시도한 모든 것은 ssh에서 차단되거나 (하위 프로세스가 완료되기를 기다리지만 완료되지 않음) 그냥 실행되고 ssh 비밀번호를 묻는 메시지도 표시되지 않습니다.

def ssh(self, command_line):
        ssh_cmd = ["ssh", "pi@" + self.cfg["BRU_MASTER_IP"], command_line]
        print(ssh_cmd)
        print("1")
        #cmd1 = subprocess.Popen(" ".join(ssh_cmd), shell=True, stdout=subprocess.PIPE)
        completed_process = subprocess.run(" ".join(ssh_cmd), shell=True, capture_output=True, text=True)
        #completed_process = subprocess.Popen(" ".join(ssh_cmd), shell=True, stdout=subprocess.PIPE)
        print("2")
        #completed_process.communicate()
        print("2a")
        #cmd1_out = completed_process.stdout.read()
        print(completed_process.stdout.read())
        print("3")

답변1

에 대한 Linux/Unix 조언을 도와드릴 수 있습니다 python.

끝없는 장기 실행 명령이 있다고 가정해 보겠습니다.

라고 할 수 있다ping $HOSTNAME

ping $HOSTNAMESSH를 사용하여 원격 시스템에서 실행하려고 합니다 .

 ssh user@remoteMachine 'ping $HOSTNAME'

하지만 ping $HOSTNAME원격 컴퓨터가 15초 후에 시간 초과되도록 하려고 합니다.

 timeout 15 ssh user@remoteMachine 'ping $HOSTNAME'

마지막으로 스크립트가 제대로 작동하고 timeout명령을 준수하는지 테스트한 후입니다.

마지막으로 Linux 명령이 준비되었으며 python스크립트를 작성할 수 있습니다.

python위 명령을 보내기 위한 인수와 인수가 포함된 스크립트를 만듭니다 .

따옴표에 주의하세요: (try it) 과 '동작이 다릅니다 ."

관련 정보