Wykonuję długo działający skrypt Pythona przez ssh na zdalnej maszynie za pomocą paramiko. Działa jak urok, żadnych problemów do tej pory.Otrzymuję dane wyjściowe z polecenia paramiko ssh exec_command w sposób ciągły
Niestety, standardowe wyjście (odpowiednio stderr) jest wyświetlane tylko po zakończeniu skryptu! Jednak ze względu na czas wykonania zdecydowanie wolałbym, aby wyprowadzał każdą nową linię po wydrukowaniu, a nie później.
remote = paramiko.SSHClient()
remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote.connect("host", username="uname", password="pwd")
# myScript produces continuous output, that I want to capture as it appears
stdin, stdout, stderr = remote.exec_command("python myScript.py")
stdin.close()
for line in stdout.read().splitlines():
print(line)
Jak można to osiągnąć?Uwaga: Oczywiście można by rura wyjście do pliku i „mniej” tego pliku za pośrednictwem innej sesji ssh, ale to jest bardzo brzydki i muszę czystsze, idealnie pythonic rozwiązanie :)
aby pomóc innym w przyszłości, myScript.py powinien zawierać sys.stdout.flush() – ItayB