pythonを使っていくつかのシェルコマンドを実行する必要がありますが、問題の1つを解決できませんでした。別のマシンにscpすると、通常、このマシンを既知のホストに追加するかどうかを尋ねるメッセージが表示されます。プログラムが自動的に「はい」を入力するようにしたいが、動かすことができなかった。私のプログラムはこれまでのところ次のようになっています:python:Popenを使ってshellコマンドと対話する
from subprocess import Popen, PIPE, STDOUT
def auto():
user = "abc"
inst_dns = "example.com"
private_key = "sample.sem"
capFile = "/home/ubuntu/*.cap"
temp = "%[email protected]%s:~" %(user, inst_dns)
scp_cmd = ["scp", "-i", private_key, capFile, temp]
print ("The scp command is: %s" %" ".join(scp_cmd))
scpExec = Popen(scp_cmd, shell=False, stdin=PIPE, stdout=PIPE)
# this is the place I tried to write "yes"
# but doesn't work
scpExec.stdin.write("yes\n")
scpExec.stdin.flush()
while True:
output = scpExec.stdout.readline()
print ("output: %s" %output)
if output == "":
break
私はこのプログラムを実行すると、プロンプトが表示され、入力を求めます。プロンプトに自動的に応答する方法は?ありがとう。
'-q'フラグは役に立ちませんか? 'man'は '-q静かなモード:ssh(1)からの警告と診断メッセージだけでなく、進捗メーターも無効にします。 ' –
@LevLevitsky:まあ、実際には警告を黙らせるだけですが、既知のホストに追加するのが標準です私は思います。 –
おそらく、あなたはsshのサブプロセスの代わりにhttp://www.lag.net/paramiko/を使う方が良いでしょう。 –