我想在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)
答案 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_path
是rc_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