подпроцесс.выполнить с оболочкой=True, похоже, на самом деле не выполняется в оболочке

#python #subprocess

Вопрос:

     txt = subprocess.run(['$profile'],
    shell=True, capture_output=True, text=True)
    print(txt.stderr)
 

У меня возникли некоторые проблемы с модулем подпроцесса. Я выделил по крайней мере одного из них.
Насколько я понимаю, этот код должен просто ввести $profile в PowerShell. Это должно возвращать путь в виде строки. Однако код ошибки, который я фиксирую, следующий (переведен): команда «$profile» либо написана с ошибкой, либо не найдена.

Кроме того, запуск » dir «работает, тогда как запуск» Get-ChildItem » возвращает ту же ошибку.

Не мог бы кто-нибудь, пожалуйста, объяснить мне проблему?

Комментарии:

1. Из документов: «В Windows с shell=True переменная среды COMSPEC указывает оболочку по умолчанию».

Ответ №1:

shell=True вероятно, используется cmd.exe в качестве оболочки, а не PowerShell.

Если вы ищете каталог профиля текущего пользователя,

 os.environ["USERPROFILE"]
 

я получу это в Windows.