【问题标题】:set env for sshfs为 sshfs 设置环境
【发布时间】: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


【解决方案1】:

哈哈,我骗了自己!我的上述方法确实有效。除了“en_US.UTF-8”在我用于测试的机器上不可用。在 bash 测试期间,我之前使用过 'de_DE.UTF-8'。

使用 LC_ALL='C' 一切正常。所以正确的解决方案是:

import os, subprocess
env = os.environ.copy()
env['LC_ALL'] = 'C'
subprocess.check_call(['sshfs', 'HOST:~/SRC', '~/DST'], env = env)

【讨论】:

    猜你喜欢
    • 2015-03-23
    • 2016-05-19
    • 2021-08-13
    • 2020-02-14
    • 2015-09-03
    • 2013-01-29
    • 2015-02-06
    • 2015-06-06
    • 1970-01-01
    相关资源
    最近更新 更多