私のテストセットアップでは、リモートマシン上で異なるアプリケーションを起動して各テストを調整する必要があります。 Java/Seleniumなどのリモートアプリケーションです。これらのアプリケーションは、終了しない限り終了しません。私はPythonを使用して、Paramikoで試してみました。 Paramiko exec_commandは、コマンドの実行後にチャネルを閉じます。コマンドは、開始されたプロセスを1秒以内に終了させます。開始されたプロセスに対してstdoutを読み込むと、スクリプトの進行状況が停止します(これまでのところ、マルチスレッドはありません)。開始されたプロセスを生き残り、進行するためのスクリプトを生き残らせるための回避策は何か。 Python sshは、複数のチャンネルを1つのセッションに開いたままにする必要があります
key = paramiko.SSHClient()
key.set_missing_host_key_policy(paramiko.AutoAddPolicy())
if testbed[name]['password_type'] == "key" :
key.connect(testbed[name]['ipaddress'], username=testbed[name]['username'], key_filename=testbed[name]['password_key'])
else:
key.connect(testbed[name]['ipaddress'], username=testbed[name]['username'],password=testbed[name]['password'])
logging.info ("Connected to %s" % testbed[name]['ipaddress'])
except paramiko.AuthenticationException:
logging.info ("Authentication failed when connecting to %s" % testbed[name]['ipaddress'])
sys.exit(1)
は、リモートマシン上のプロセスを起動するにはParamikoデバイスのログイン(窓) -
command = 'javaw -jar %s' %(filename)
logging.info(command)
handle.exec_command(command)
time.sleep(1)
cmd = "wmic process where Caption='java.exe' get Processid"
stdin, stdout, stderr = handle.exec_command(cmd)
output = stdout.read().strip().split()
logging.info(output)
pid = output[1]
logging.info("java started with PID = %s" %(pid))
私たちは、この時点でPIDを取得
が、数秒後に -
cmd = "wmic process where Caption='java.exe' get Processid"
stdin, stdout, stderr = handle.exec_command(cmd)
logging.info(stdout.read() + stderr.read())
戻り値 - "使用可能なインスタンスがありません。"
pycharmを使用してOSXからプログラムを実行すると、このエラーが発生します。手順以下のITERMとPythonコマンドを使用して、同じマシンが実行され、私は(両方のケースでwhoamiは、同じユーザープロファイルを返す)チャネルが閉じられて表示されていない -
>>> dev.connect("a.b.c.d",username="pqr",password="xyz")
>>> dev.exec_command("javaw -jar selenium-server-standalone-3.1.0.jar")
(<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=262144 -> <paramiko.Transport at 0xfa06b10L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>, <paramiko.ChannelFile from <paramiko.Channel 0 (open) window=262144 -> <paramiko.Transport at 0xfa06b10L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>, <paramiko.ChannelFile from <paramiko.Channel 0 (open) window=262144 -> <paramiko.Transport at 0xfa06b10L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>)
>>> br = webdriver.Remote(command_executor=url,desired_capabilities=options.to_capabilities())
>>> dev.exec_command("START /B C:\PROGRA~1\abc.exe")
(<paramiko.ChannelFile from <paramiko.Channel 1 (open) window=262144 -> <paramiko.Transport at 0xfa06b10L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>, <paramiko.ChannelFile from <paramiko.Channel 1 (open) window=262144 -> <paramiko.Transport at 0xfa06b10L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>, <paramiko.ChannelFile from <paramiko.Channel 1 (open) window=262144 -> <paramiko.Transport at 0xfa06b10L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>)
質問を編集して、これらのリモートプロセスを開始するための関連するソースコードを含めてください。 – Kenster
@Kenster:これが役に立ったら教えてください。 – shamik