Доступ к общей папке Windows из Linux с помощью Python - PullRequest
0 голосов
/ 14 июня 2019

Я создал общую папку (с доступом ко всем) в Windows. на C:\sharedfolder, поэтому я могу получить к нему доступ:

\\mylocalnetworkip\sharedfolder

Теперь я хочу, чтобы скрипт Python записывал туда вещи с другой машины.

Если я запускаю этот простой скрипт в Windows (с моего компьютера, используя Python под Windows), он работает. Он создает файл и записывает это содержимое.

file = open(r'\\mylocalnetworkip\sharedfolder\tester.dat', 'w')
file.write('whatever')
file.close()

Но если я запускаю тот же сценарий в Linux (с другой машины, но все еще в моей локальной сети, это означает, что если я пингую свой IP, он работает), он не работает.

С это не работает Я имею в виду, что это не ошибка , странно то, что он создает файл по тому же пути с именем всего

root@mc:/tmp# python tester.py  <-- the script with the code above
root@mc:/tmp# ls
\\mylocalnetworkip\sharedfolder\tester.dat  tester.py
root@mc:/tmp# cat \\mylocalnetworkip\sharedfolder\tester.dat
whatever
root@mc:/tmp#

Может кто-нибудь помочь мне и сказать, как я могу заставить его работать в Linux? Спасибо!

PS: Я также проверил его, используя '\\\\mylocalnetworkip\\sharedfolder\\tester.dat', но не повезло.

1 Ответ

0 голосов
/ 14 июня 2019

Две проблемы здесь.

Монтаж

Linux не может обрабатывать пути, подобные этому \\mylocalnetworkip\sharedfolder\tester.dat.

В системе Linux сначала необходимо «смонтировать» общую папку, прежде чем вы сможете ее использовать. После монтирования (в зависимости от точки монтирования) путь может выглядеть следующим образом /mnt/mylocalnetworkip/sharedfolder/tester.dat.

Существуют разные способы монтирования в Linux. например проверить https://unix.stackexchange.com/q/18925/136851 или https://www.putorius.net/mount-windows-share-linux.html

Разделители пути

В Windows и Linux используются разные разделители пути. Хорошее решение в Python - создать такой путь.

import os
os.path.join('/', 'mnt', 'mylocalnetworkip', 'sharedfolder', 'tester.dat')

Результат

/mnt/mylocalnetworkip/sharedfolder/tester.dat

Помните о первом /, который указывает корень файловой системы linux.

...