FileNotFoundError: [WinError 2] Не удается найти указанный файл, subprocess.popen

Пишу небольшой vpn-клиент для личного использования. В строке

t = str(subprocess.call(r'Add-VpnConnection.exe -Name "VPNclient" -ServerAddress "vpnaddress” -PassThru')).encode("cp866").decode("windows-1251")
showinfo(str(t), str(t))

Возникает ошибка:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "C:\Users\Ivan\Desktop\vpn\main.py", line 25, in oneconnect
    t = str(subprocess.call(r'Add-VpnConnection.exe -Name "wefewfeewffewfwwefweff" -ServerAddress "vpn.winitpro.ru” -PassThru')).encode("cp866").decode("windows-1251")
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\subprocess.py", line 349, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\subprocess.py", line 951, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\subprocess.py", line 1420, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] Не удается найти указанный файл

Для проверки на работоспособность popen использовал

t = str(subprocess.call(r'ping 8.8.8.8')).encode("cp866").decode("windows-1251")

В таком случае все работает корректно

Возможно, ошибка возникает потому что команда выполняется только в powershell, но не в cmd. Если это так, то как можно использовать powershell в python?

p.s. os.popen то же самое


Ответы (1 шт):

Автор решения: IvanProkshin

Оказалось, что и правда, команда выполняется в cmd, а чтобы выполнить в powershell, нужно сделать так:

t = str(subprocess.call('powershell -executionpolicy bypass -command \"Add-VpnConnection -Name "wefewfeewffewfwwefweff" -ServerAddress "vpn.winitpro.ru” -PassThru\"')).encode("cp866").decode("windows-1251")
→ Ссылка