繁体   English   中英

Klist python 子进程返回

[英]Klist python subprocess return

我需要一些帮助来了解 windows cmd/ps 行为以及如何在 python 上处理它。

如果我在命令提示符 (CMD) 上运行“klist”或在任何文件夹上运行 PowerShell (PS),我会收到以下响应:

C:\>klist
A Identificação de Logon atual é 0:0x249a0c1
Tíquetes em Cache: (0)

如果我在 MIT 文件夹 (C:\Program Files\MIT\Kerberos\bin) 下运行 klist,我有这个响应(我在任何情况下都期望得到的响应)

C:\Program Files\MIT\Kerberos\bin>klist
Ticket cache: FILE:C:\Users\XXX\XXXXX\krb5\KRB5CCNAME
Default principal: XXXXX@XXXX.COM.BR

Valid starting     Expires            Service principal
08/02/22 22:38:34  08/03/22 19:53:30  krbtgt/XXX.COM.BR@XXX.COM.BR
        renew until 08/03/22 22:38:34

如果我在 MIT 文件夹的 PS 中运行 klist,我会得到完全不同的响应:

PS C:\Program Files\MIT\Kerberos\bin> klist
A Identificação de Logon atual é 0:0x249a112
Tíquetes em Cache: (0)

首先:为什么 CMD 和 PS 在运行 MIT 文件夹中的 klist 可执行文件时表现不同?

第二:如何将我的 windows “默认” klist 设置为 MIT klist(而不是我什至不知道的其他 klist)?

我有一个 Python 脚本,它运行在“klist”上运行的 python 子进程以获取活动(或非活动)票的状态。 由于上面显示的问题,当它“运行”klist 时,他们得到了错误的答案。

# checa se há tickets e se estão expirados
klist = sp.run(["klist", "-s"], timeout=5, encoding="iso8859-1")
if klist.returncode == 1:
    return False

# checa se os tickets existentes pertencem ao usuário e ao cluster correto
klist = sp.run(
    ["klist"], stdout=sp.PIPE, stderr=sp.PIPE, encoding="iso8859-1", timeout=5
)
if klist.returncode == 1:
    return False

在第三:如何设置上面的 python 脚本以运行“正确”klist(假设我无法更改 windows 默认行为)?

首先:为什么 CMD 和 PS 在运行 MIT 文件夹中的 klist 可执行文件时表现不同?

CMD,传统上用于 Windows(和 MS-DOS),首先在当前目录中查找klist.exe - 因此它在该目录中运行C:\Program Files\MIT\Kerberos\bin\klist.exe

PowerShell 不这样做——它只$env:PATH中查找,除非它明确给出了运行的完整路径。 与您在 Unix shell(例如 Bash)中所做的类似,只有.\klist会在当前目录中运行 klist.exe,而仅针对 PATH 中的位置检查裸klist (忽略当前目录)。

第二:如何将我的 windows “默认” klist 设置为 MIT klist(而不是我什至不知道的其他 klist)?

编辑 Windows %PATH%环境变量,将 MIT Kerberos 'bin' 目录放在开头。

第三:如何设置上面的 python 脚本以运行“正确”klist(假设我无法更改 windows 默认行为)?

指定 .exe 文件的完整路径:

sp.run([r"C:/Program Files/MIT/Kerberos/bin/klist", "-s"], ...)

或仅为该进程更新 PATH :

os.environ["PATH"] = r"C:\Program Files\MIT\Kerberos\bin;" + os.environ["PATH"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM