リモートコンピュータでタスクを実行するためのPythonスクリプトを作成しています。実際、Pythonスクリプトは私のコンピュータで実行されており、リモートコンピュータはUbuntuを実行しているボットです。
私が下したコマンドはロボットソフトウェアを起動して終了しません(^ 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)とは'
動作が異なります。"