원격 컴퓨터에서 작업을 수행하기 위해 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 $HOSTNAME
SSH를 사용하여 원격 시스템에서 실행하려고 합니다 .
ssh user@remoteMachine 'ping $HOSTNAME'
하지만 ping $HOSTNAME
원격 컴퓨터가 15초 후에 시간 초과되도록 하려고 합니다.
timeout 15 ssh user@remoteMachine 'ping $HOSTNAME'
마지막으로 스크립트가 제대로 작동하고 timeout
명령을 준수하는지 테스트한 후입니다.
마지막으로 Linux 명령이 준비되었으며 python
스크립트를 작성할 수 있습니다.
python
위 명령을 보내기 위한 인수와 인수가 포함된 스크립트를 만듭니다 .
따옴표에 주의하세요: (try it) 과 '
동작이 다릅니다 ."