From f42544cb6b1a55d0d4abe17710b673aa44008f1d Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Fri, 25 Jan 2019 02:13:08 +0900 Subject: [PATCH] uninstalled: Add support PowerShell on Windows ... depending on detected shell program. For instance, if the nearest ancestor process is PowerShell, run uninstalled environment via PowerShell. Otherwise, $COMSPEC (most likely cmd.exe) will be used. --- cmd_or_ps.ps1 | 19 +++++++++++++++++++ gst-uninstalled.py | 16 ++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 cmd_or_ps.ps1 diff --git a/cmd_or_ps.ps1 b/cmd_or_ps.ps1 new file mode 100644 index 0000000000..b134006517 --- /dev/null +++ b/cmd_or_ps.ps1 @@ -0,0 +1,19 @@ +$i=1 +$ppid=(gwmi win32_process -Filter "processid='$pid'").parentprocessid +$pname=(Get-Process -id $ppid).Name +While($true) { + if($pname -eq "cmd" -Or $pname -eq "powershell") { + Write-Host ("{0}.exe" -f $pname) + Break + } + + # 10 times iteration seems to be sufficient + if($i -gt 10) { + Break + } + + # not found yet, find grand parant + $ppid=(gwmi win32_process -Filter "processid='$ppid'").parentprocessid + $pname=(Get-Process -id $ppid).Name + $i++ +} diff --git a/gst-uninstalled.py b/gst-uninstalled.py index 1e5adabcde..211c60ad53 100755 --- a/gst-uninstalled.py +++ b/gst-uninstalled.py @@ -193,6 +193,11 @@ def get_subprocess_env(options, gst_version): return env +def get_windows_shell(): + command = ['powershell.exe' ,'-noprofile', '-executionpolicy', 'bypass', '-file', 'cmd_or_ps.ps1'] + result = subprocess.check_output(command) + return result.decode().strip() + # https://stackoverflow.com/questions/1871549/determine-if-python-is-running-inside-virtualenv def in_venv(): return (hasattr(sys, 'real_prefix') or @@ -226,8 +231,15 @@ if __name__ == "__main__": if not args: if os.name is 'nt': - args = [os.environ.get("COMSPEC", r"C:\WINDOWS\system32\cmd.exe")] - args += ['/k', 'prompt [gst-{}] $P$G'.format(gst_version)] + shell = get_windows_shell() + if shell == 'powershell.exe': + args = ['powershell.exe'] + args += ['-NoLogo', '-NoExit'] + prompt = 'function global:prompt { "[gst-' + gst_version + '"+"] PS " + $PWD + "> "}' + args += ['-Command', prompt] + else: + args = [os.environ.get("COMSPEC", r"C:\WINDOWS\system32\cmd.exe")] + args += ['/k', 'prompt [gst-{}] $P$G'.format(gst_version)] else: args = [os.environ.get("SHELL", os.path.realpath("/bin/sh"))] if "bash" in args[0] and not strtobool(os.environ.get("GST_BUILD_DISABLE_PS1_OVERRIDE", r"FALSE")):