我正在尝试将 rsync 与 python 一起使用。我读过将参数传递给 Popen 的首选方法是使用数组。
我试过的代码:
p = Popen(["rsync",
"\"{source}\"".format(source=latestPath),
"\"{user}@{host}:{dir}\"".format(user=user, host=host, dir=dir)],
stdout=PIPE, stderr=PIPE)
结果是 rsync 要求输入密码,即使我已经设置了 SSH 密钥来进行身份验证。
我认为这是执行新进程的环境的问题。我接下来尝试的是:
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)
该程序运行良好。为了这个脚本,这真的没关系,但我想知道有什么区别?为什么其他两个(主要是第一个)不起作用?
难道只是需要shell环境,第二个不对?
编辑:变量的内容
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/'