私はリモートマシンをPythonで再起動します。再起動すると、現在のsshセッションが終了します。要求は返されません。私は帰りに興味がありません。リモートコマンドがPythonを返さない
os.command(「sshpass -pパスワードのsshユーザー@ホストの再起動」)
コードは、再起動を実行している、しかし、現在のセッションが死亡、スクリプトが返すことはありません。
私は非同期を行うことができ、スレッド、他の簡単なオプションを無視することができますか?
私はリモートマシンをPythonで再起動します。再起動すると、現在のsshセッションが終了します。要求は返されません。私は帰りに興味がありません。リモートコマンドがPythonを返さない
os.command(「sshpass -pパスワードのsshユーザー@ホストの再起動」)
コードは、再起動を実行している、しかし、現在のセッションが死亡、スクリプトが返すことはありません。
私は非同期を行うことができ、スレッド、他の簡単なオプションを無視することができますか?
私はスクリプトが返されないことに驚いています。再接続する前にリモートから接続をリセットする必要があります。プロセスのasycを実行することができます。問題の1つは、親プロセスでクリーンアップされていないサブプロセスがゾンビになるということです(まだプロセステーブルの領域を占有しています)。タイマーを追加すると、スクリプトに汚れた作業をしてからバックグラウンドでクリーンアップする時間を与えることができます。
私はこのコマンドをパラメータリストに切り替えて、shell=True
の設定をスキップしたことに注意してください。中間シェルプロセスが実行されないことを意味します。
import sys
import subprocess as subp
import threading
import timing
def kill_process(proc):
# kill process if alive
if proc.poll() is None:
proc.kill()
time.sleep(.1)
if proc.poll() is None:
sys.stderr.write("Proc won't die\n")
return
# clean up dead process
proc.wait()
proc = subp.Popen(['sshpass', '-p', password, 'ssh', '[email protected]', 'reboot')
threading.Timer(5, kill_process, args=(proc,))
# continue on your busy day...
afaik、 'os.command'はありません。あなたは実際に 'os.system'を使用していますか?代わりに 'subprocess.check_call'を試しましたか? – Evert
あなたは何が起こると思いますか? 「要求は返されません」とはどういう意味ですか? – Tolli