там, я довольно новый в Python и столкнулся с проблемой, я не могу найти ответ. чувствительный) < /p>
исходный путь: "c: \ myprojects \ foter1" < /p>
Оригинальная команда процесса: "c: \ myprojects \ folder1 \ process.exe" < /p>
psutils найдет и убьет процесс, когда cmdline точно:
/>"c:\myprojects\folder1\process.exe"
, но не как
"c:\myprojects\folder1\process.exe"
Как я могу получить оригинальный корпус?tk_path = filedialog.askdirectory(initialdir=r"C:\MyProjects", title="...")
< /code>
Результат: "c: \ myprojects \ folder1" < /p>
Я попытался настроить путь с помощью win32api: < /p>
cased_path = win32api.GetLongPathName(tk_path)
cased_path = os.path.splitext(cased_path)[0]
< /code>
Результат: "c: \ myfolder \ foter1"
«c:» все еще является нижним регистом < /p>
, и я попытался настроить его с помощью Glob: < /p>
cased_path = glob.glob(re.sub(r'([^:])(?=[/\\]|$)', r'[\1]', tk_path))[0]
< /code>
Тот же результат: "C: \ myprojects \ folder1"
«C:» все еще является строчной частью < /p>
Мой текущий обходной путь - снять скорректированную строку (возвращенную из Win32Api), разделить ее, заработать первую часть и собрать все вместе.splitted_path = cased_path.split(":",1)
first_part = splitted_path[0].capitalize()
second_part = ":" + splitted_path[1]
final_path = first_part + second_part
< /code>
Результат: "c: \ myprojects \ folder1" Это работает, но кажется действительно глупым ^^ < /p>
Как я убиваю процесс по его cmdline: < /p>
def kill_process(commandline):
for proc in psutil.process_iter(['pid', 'cmdline']):
try:
cmdline_list = proc.info.get('cmdline')
if not cmdline_list:
continue
cmdline_str = ' '.join(cmdline_list)
if commandline in cmdline_str:
proc.kill()
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
continue
Подробнее здесь: https://stackoverflow.com/questions/796 ... kdirectory
Как получить надлежащий путь к корпусу от tkkinters filedialog.askdirectory ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение