Pythonでrsyncを使用しようとしています。Popen に引数を渡すための推奨される方法は、配列を使用することです。
私が試したコード:
p = Popen(["rsync",
"\"{source}\"".format(source=latestPath),
"\"{user}@{host}:{dir}\"".format(user=user, host=host, dir=dir)],
stdout=PIPE, stderr=PIPE)
その結果、認証を行うために SSH キーを設定したにもかかわらず、rsync がパスワードを要求します。
これは、新しいプロセスが実行される環境に問題があると思います。次に試したことは次のとおりです。
p = Popen(["rsync",
"\"{source}\"".format(source=latestPath),
"\"{user}@{host}:{dir}\"".format(user=user, host=host, dir=dir)],
stdout=PIPE, stderr=PIPE, shell=True)
これにより、rsync が「正しい使用法」を出力するため、引数が誤って rsync に渡されます。これが機能するかどうかはわかりません(shell = Trueで配列を渡す)
次のように配列を完全に削除すると:
p = Popen("rsync \"{source}\" \"{user}@{host}:{dir}\"".format(
source=latestPath, user=user, host=host, dir=dir),
stdout=PIPE, stderr=PIPE, shell=True)
プログラムは正常に動作します。このスクリプトでは問題ありませんが、何が違うのか知りたいですか? 他の2つ(主に最初のもの)が機能しないのはなぜですか?
シェル環境が必要なだけで、2番目は間違っていますか?
編集:変数の内容
latestPath='/home/tomcat/.jenkins/jobs/MC 4thworld/workspace/target/FourthWorld-0.1-SNAPSHOT.jar'
user='mc'
host='192.168.0.32'
dir='/mc/test/plugins/'