リモート マシンにログオンし、コマンドを実行して出力を返すスクリプトを作成しようとしています。paramiko ライブラリを使用して、Python でこれを行っています。ただし、何らかの理由で完全な出力が生成されず、1 行しか生成されません。
問題を切り分けるために、simple という名前のローカル スクリプトを作成しました。このスクリプトはコマンドを実行し、出力をファイル remote_test_output.txt に送信します。次に、代わりにファイルを単純に sftp します。ファイルには同じ 1 行しか含まれていませんでした。出力の唯一の行は毎回同じです: コマンドの応答コードです。
これをすべて手動で行うと(sshでログインし、./simpleを実行します)、すべて意図したとおりに機能し、出力ファイルは正しいです。ただし、私のマシンのスクリプトを使用して実行すると、1行しか返されません。
私のコード:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(host, username, password)
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('LD_LIBRARY_PATH=/opt/bin ./simple\n')
print "output:", ssh_stdout.read()+"end" #Reading output of the executed command
print "err:", ssh_stderr.read()#Reading the error stream of the executed command
sftp = ssh.open_sftp()
sftp.get('remote_test_output.txt', 'local_test_output.txt')
sftp.close()
返されるもの:
response code: 128
返すべきもの:
field1:value1
field2:value2
response code: 128
field3:value3
field4:value4
etc
私が呼び出そうとしているコマンドが正常に出力されない理由は誰にもわかりますか?
LD_LIBRARY_PATH 変数の割り当てを含める必要があります。そうしないと、ライブラリが存在しないというエラーが発生します。