Python - Получить текущую папку пользователя при удаленном запуске проекта - PullRequest
0 голосов
/ 08 мая 2018

У меня есть программа, которую я запускаю с сервера Jenkins.

Я создал исполняемый файл с помощью pyinstaller и установил его на два компьютера. а потом Дженкинс называет их обоих.

Сначала я использовал os.path.expanduser ('~') , чтобы получить путь пользователя, но он вернул

"C:\Windows\System32\config\systemprofile"

После того, как я попытался просто получить имя пользователя, используя os.environ ['USERPROFILE'] еще получил:

"C:\Windows\System32\config\systemprofile"

Наконец, я нашел другое решение, не требующее модуля os, и попытался:

import ctypes.wintypes
CSIDL_PERSONAL = 5       # My Documents
SHGFP_TYPE_CURRENT = 0   # Get current, not default value

buf= ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
ctypes.windll.shell32.SHGetFolderPathW(None, CSIDL_PERSONAL, None, 
SHGFP_TYPE_CURRENT, buf)

print(buf.value)

Это не вернуло значение в моем журнале.

Если я запускаю exe локально, все значения возвращаются обратно нормально. Пакетная команда, которую я запускаю:

start /wait C:\JenkinsResources\MarinaMain.exe

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

1 Ответ

0 голосов
/ 09 мая 2018

Итак, чтобы заставить это работать, я сначала скачал плагин Windows Power Shell. После перезагрузки я использовал команду:

$PCAndUserName = Get-WMIObject -class Win32_ComputerSystem | select username

$UserName = [string]$PCAndUserName
$UserName = $UserName.split("\\")[-1]
$UserName = $UserName -replace ".{1}$"
$UserName

Это дало мне имя текущего пользователя на компьютере, независимо от того, удаленно ли я запускаюсь с Jenkins.

...