【发布时间】:2012-10-21 16:31:18
【问题描述】:
sshfs 如果远程主机不支持本地语言环境 (LC_ALL),则安装失败。 Goolge 搜索将我指向 www.knoppixforum.de,了解如何在 bash 上处理此问题。
但我需要从python 致电sshfs。 (失败的)命令如下所示:
import subprocess
subprocess.check_call(['sshfs', 'HOST:~/SRC', '~/DST'])
另一个搜索将我指向'Set locale encoding in python'。所以我认为它应该是这样的:
import os, subprocess
env = os.environ.copy()
env['LC_ALL'] = 'en_US.UTF-8'
subprocess.check_call(['sshfs', 'HOST:~/SRC', '~/DST'], env = env)
但这也不起作用。我认为它失败了,因为 sshfs 为 ssh 派生了一个新进程,它不擅长我的 env 变量?
错误信息总是:remote host has disconnected
【问题讨论】:
-
(1) 如果设置环境变量并从 bash 运行命令,是否有效? (2) 如果您在第二个代码 sn-p 中设置
env,并只运行subprocess.check_call(['env'], env=env),您是否在输出中看到LC_ALL? -
你到底想做什么?可能有更简单的方法可以解决您的问题。
-
@WarrenWeckesser:(1)是的,它有效(2)也产生异常输出。即使
subprocess.check_call(['locale'], env=env)显示正确的语言环境。 @PedroRomano:我使用 sshfs 提供对 GUI 的文件访问和 BackInTime 中 sshtools.py line 77 中的 take_snapshot 过程 -
是否可以选择使用paramiko 进行远程文件系统访问,而不是使用 fuse sshfs 在本地安装它?
-
paramiko 会导致整个 BackinTime 的代码发生巨大变化,因为 BIT 在其快照路径上使用了大量本地命令。所以我决定创建一个挂载框架并使用 sshfs 来简单地挂载远程路径(其他服务将随之而来)。真正的备份是通过 ssh 上的 rsync 完成的,不会影响 sshfs,但对于前置和后置命令,我们需要本地访问。它确实工作得很好,我只需要在与主干合并之前修复一些错误(比如这个)。
标签: python environment-variables sshfs