установить env для sshfs

sshfs не монтируется, если удаленный хост не поддерживает местную локаль (LC_ALL). Поиск в Google указал мне на www.knoppixforum.de о том, как справиться с этой проблемой на bash.

Но мне нужно позвонить sshfs из python. (Неудачная) команда выглядит так:

import subprocess
subprocess.check_call(['sshfs', 'HOST:~/SRC', '~/DST'])

Другой поиск указал мне на "Установить кодировку локали в 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


person Germar    schedule 21.10.2012    source источник
comment
(1) Если вы установите переменную среды и запустите команду из bash, это сработает? (2) Если вы установите env, как во втором фрагменте кода, и запустите только subprocess.check_call(['env'], env=env), увидите ли вы LC_ALL в выводе?   -  person Warren Weckesser    schedule 21.10.2012
comment
Что именно вы пытаетесь сделать? Возможно, есть более простые варианты решения вашей проблемы.   -  person Pedro Romano    schedule 21.10.2012
comment
@WarrenWeckesser: (1) да, это работает (2) которые также производят исключенный вывод. Даже subprocess.check_call(['locale'], env=env) показывает правильную локаль. @PedroRomano: я использую sshfs, чтобы предоставить доступ к файлам графическому интерфейсу и процессу take_snapshot BackInTime в строка 77 sshtools.py   -  person Germar    schedule 21.10.2012
comment
Можно ли использовать paramiko для доступа к удаленной файловой системе вместо локального монтирования с помощью fuse sshfs ?   -  person Pedro Romano    schedule 21.10.2012
comment
paramiko вызвал бы серьезные изменения во всем коде BackinTime, потому что BIT использует множество локальных команд на своем пути к моментальному снимку. Поэтому я решил создать инфраструктуру монтирования и использовать sshfs для простого монтирования удаленного пути (последуют и другие службы). Реальное резервное копирование выполняется с помощью rsync через ssh и не влияет на sshfs, но для предварительных и последующих команд нам нужен локальный доступ. Это работает довольно хорошо, и мне нужно только исправить некоторые ошибки (например, эту) перед слиянием с основным стволом.   -  person Germar    schedule 21.10.2012


Ответы (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)
person Germar    schedule 22.10.2012