Программа Python ssh не работает из-за различных разделителей пути в Linux и Windows - PullRequest
0 голосов
/ 26 июня 2019

Я использую MacOS для разработки приложения Python2.7, которое использует paramiko для подключения к удаленной машине Linux. Теперь я передал свой ранний код пользователю Microsoft Windows для тестирования и сразу столкнулся с проблемой, заключающейся в том, что os.path.join по умолчанию использует \ в качестве разделителя в пути, когда приложение вызывает команду для выполнения на удаленном компьютере. машина. Поэтому я должен убедиться, что при выполнении операций в Linux используется правильный разделитель при использовании разделителя по умолчанию на локальном компьютере.

Я думаю, что самое простое решение здесь - просто определить мою собственную функцию joinpath, которая всегда использует / в качестве разделителя, и просто вызывать эту функцию всякий раз, когда операция выполняется удаленно.

def joinpath(*args):
    return "/".join(args)

Или есть лучший и более общий подход к такой ситуации?

1 Ответ

1 голос
/ 26 июня 2019

когда приложение работает на машине linux

Это предложение в основном означает, что Python работает в Linux.Хотя это:

Это вызывается с компьютера с Windows, но клиент sftp открывает файл на удаленной машине Linux

на самом деле было тем, о чем это все.


Итак:

os модуль работает в вашей ОС (где работает Python), предоставляя вам специфичные для ОС и правильные результаты

SSH (включаяSFTP-серверы не предоставляют то, какой CLI они используют, включая разделители.Они просто дают вам общий интерфейс для подключения (а в случае SFTP - передачу файлов), но в остальном это ваша проблема.- Я имел дело с сетевыми устройствами через ssh с использованием Python, мне пришлось, например, вручную разобраться с распознаванием ошибок и т. Д., Потому что вывод только текстовый.

Это означает, что если вы знаете, что будете подключаться кТолько для машин Linux, используйте это соединение (возможно, добавьте немного больше, если у вас есть путь к каталогу, который заканчивается на «/» - в вашем случае это приведет к «//» в пути).

Если вы подключитесь как к Windows, так и к Linux, сделайте запасной вариант - поймайте ошибку (или найдите ее вручную в выходных данных, я не работал с paramiko, поэтому я не знаю, как с этим справились), ииспользуйте другой разделитель как запасной вариант и запомните его для этого сеанса.

...