Python子进程:如何发送密码(rclone配置)

时间:2018-03-31 13:38:00

标签: python subprocess

我想在python中使用rlcone。 如果我没有使用密码加密我的rclone配置,那么我可以简单地执行此操作:

import subprocess 
process = subprocess.Popen(["rclone", "listremotes"], shell=True, stdin=subprocess.PIPE)
output = process.communicate()
print(output)

但我想用密码保护我的Rclone配置,所以我需要一种方法将它发送到rclone。我按照answer进行了操作,但收到错误Failed to read password: The handle is invalid

import subprocess 
psw= input("enter psw")
psw_byte= str.encode(psw+'\n')
process = subprocess.Popen(["rclone", "listremotes"], shell=True, stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.stdin.write(psw_byte)
process.stdin.flush()
output = process.communicate()
print(output)

3 个答案:

答案 0 :(得分:2)

我建议您使用RCLONE_CONFIG_PASS环境变量将配置密码传递给rclone。请参阅section in the docs about configuration encryption

例如

os.environ("RCLONE_CONFIG_PASS") = "mypassword"
除非你指定了tty,否则读取密码的Unix程序往往不会像这样编写脚本。

虽然这有很多麻烦,所以我建议只改为设置环境变量。

PS如果您只想为子流程设置环境,可以这样做:Python subprocess/Popen with a modified environment

PPS我是rclone的作者: - )

答案 1 :(得分:0)

这可能无法完全解决问题,但是,由于我在其他地方没有以这种形式找到此问题,因此这是在ipython和/或jupyter ipynb中使用的解决方案。

可以适应遇到的问题:

import getpass
rc_passwd = getpass.getpass()

! rclone --password-command "echo {rc_passwd}" lsd rc_remote:rc_path

rc_pathrc_remote中的路径

答案 2 :(得分:-1)

一种方法是使用/usr/include/ncurses/curses.h并调用存储subprocess.call()命令的.cmd

在python中:

cmd

import subprocess cmd_path = "C:\Users\user\Desktop\rclone_command.cmd" subprocess.call([cmd_path]) 中(在rclone完成同步之后,你可以启动另一个python脚本cf rclone_command.cmd ex来解析日志):

start