Я пытаюсь получить доступ к сетевому диску с python. У меня есть базовая проверка:
if not os.access('\\\\path', os.W_OK):
print 'Not accessible'
else:
print 'Accessible'
Это работает, но когда я вызываю этот скрипт из php, он говорит: «Недоступно».
Я подумал, что проблема может быть связана с тем, что PHP не запускается под учетной записью пользователя, с которой я вошел в систему, но как мне указать пользователя с соответствующими правами?
Я вызываю скрипт на Python через exec
команда:
exec('python "path-to.py"');
Я использую машину Win 7. Если я добавлю RunAs /user:username password
до конца exec
Команда — ничего не происходит.
Решение по ОП.
Поскольку PHP-скрипт не имел доступа к общему сетевому ресурсу, я решил подключить сетевой диск с помощью PHP. Для этого я использовал следующие 2 строки:
$WshNetwork = new COM("WScript.Network");
$WshNetwork->MapNetworkDrive("L:", '\\\\path', FALSE, 'domain\\username', 'password');
о котором я узнал в этой теме: ссылка на сайт (знайте, что есть две страницы)
При первом подключении через COM я получил ошибку:
Несколько подключений к серверу или общему ресурсу одним и тем же пользователем,
использование более одного имени пользователя не допускается <…>
что в основном означает, что вы уже подключены к сетевому диску. Чтобы решить это, я использовал net use
команда в следующей комбинации:
net use * /delete /noconfirm
taskkill /f /IM explorer.exe
explorer.exe
net use x: \\myServer\mySHaredFolder
что я узнал здесь: ссылка на сайт
Ты можешь использовать net use
Команда, чтобы увидеть, какие соединения запоминаются (= присутствует). После того, как подключения перечислены, вы затем используете либо net use /delete \\your_connection
удалить соединение, которое вы хотите, или net use * /delete
если вы хотите удалить все соединения. После этого вам нужно перезагрузить компьютер, но во избежание этого вы можете просто перезапустить explorer.exe
сначала отключив его на консоли: taskkill /f /IM explorer.exe
а затем перезапустить: explorer.exe
У меня также было несколько «мертвых ссылок», привязанных к дискам. Как удалить «мертвые ссылки» я узнал отсюда:
Тема «Как отключить« непропорциональные UNC-пути »в Windows»:
ссылка на сайт
который в основном направляет вас на очистку реестра:
cmd
как администраторregedit
HKCU\software\Microsoft\Windows\CurrentVersion\Explorer\mountPoints2
После этого ваш проводник (мой компьютер) должен быть очищен и COM должен работать. PHP теперь может получить вывод из скрипта Python, который делает все необходимое на сетевом диске.
Других решений пока нет …