pythonを使用して特定のタスクを自動化したい。
このタスクには、リモートサーバにsshで接続し、prog.out
とすると、がユーザ入力を要求する場合とそうでない場合があります。
いくつかの調査と私のオプションの重み付けをした後、私はPythonのParamikoを使用することにしました(これは、以下を考慮すると間違っているかもしれません...)。PythonのParamikoでssh接続とプログラムの実行を自動化
のは、任意の入力を求めていないprog.out
の簡単な可能性を見てみましょうではなく、単にコンソールにいくつかの情報を出力します。prog.out
、および実行されるのを待って、サーバー名に座っている:にコンパイル
int main(int argc, char* argv[]) {
printf("Hey there, fella\n");
printf("How are you this morning?\n");
printf("See ya...\n");
return 0;
}
。だから、その場合の
:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("server_name")
sin, sout, serr = client.exec_command('./prog.out')
for line in sout.readlines():
print(line, end = '')
は完全に正常に動作します、とprog.out
が生み出すものは何でもプリントアウトします。
しかし、その代わりにもしprog.out
は次のとおりです。
int main(int argc, char* argv[]) {
printf("Hey there, fella\n");
printf("How are you this morning?\n");
printf("please enter an integer...\n");
int a;
scanf("%d", &a);
printf("you entered %d\n", a);
printf("see ya...\n");
return 0;
}
はその後、上記のpythonコードは(?EOF待ち)sout.readlines()
でブロックします...
sout.readlines()
にブロックを回避する方法は、書面によりprog.out
に入力を提供することです
...
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("server_name")
sin, sout, serr = client.exec_command('./prog.out')
sin.write('55\n')
for line in sout.readlines():
print(line, end = '')
しかしprog.out
は、ユーザーの入力を要求したりしません場合、私は事前に知ることはできませんI:そのSTDINパイプへprog.out
を実行する堅牢な方法を探しており、ユーザーが必要なだけ長くそれを操作できるようにしています。 prog.out
が入力を予期しているときに何らかの兆候がありますか?
EDIT
OK、私は少し実験をした、そしてチャンネルから読みしようとするが()限りprog.out
が終了していないとして、ブロックしますが、prog.out
として出ることができないことが分かりました入力が提供されていない限り...
まだ完了していない場合でも、すでにprog.out
によって送信されたバイトを読み取ることができません。
私は本当にあなたのニーズに合わせて、おそらくより適していParamikoの上に構築されたライブラリがあり
私はむしろparamikoでそれをやりたいと思っています... –
もちろん、ファブリックの作者は、あなたがやろうとしていることをすでに行っています – e4c5
このライブラリが私の特定のニーズをどのように助けることができるか少し詳しく説明できますか?私はその文書を読んでいますが、これがなぜ私の問題に役立つのか理解できませんでした。 –