首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Klist python子进程返回

Klist python子进程返回
EN

Stack Overflow用户
提问于 2022-08-03 02:05:16
回答 1查看 60关注 0票数 0

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

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

代码语言:javascript
复制
C:\>klist
A Identificação de Logon atual é 0:0x249a0c1
Tíquetes em Cache: (0)

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

代码语言:javascript
复制
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,我会得到一个完全不同的响应:

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

At :为什么CMD和PS在MIT文件夹中运行klist可执行文件时行为不同?

At Second:如何将窗口“默认”klist设置为MIT klist (而不是我甚至不知道的其他klist)?

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

代码语言:javascript
复制
# 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

At Third:如何将上面的python设置为运行“正确”的klist (假设我无法更改windows默认行为)?

EN

回答 1

Stack Overflow用户

发布于 2022-08-03 12:24:40

首先,

:为什么在MIT文件夹中运行klist可执行文件时,CMD和PS的行为有所不同?

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

PowerShell没有这样做--它只在$env:PATH中查找,除非显式地给出了要运行的完整路径。类似于在Unix (如Bash )中所做的工作,只有.\klist将在当前目录中运行klist.exe,而仅根据路径中的位置(忽略当前的目录玩具)检查裸klist

第二,如何将窗口“默认”klist设置为MIT klist (而不是我甚至不知道的其他klist)?

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

第三位

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

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

代码语言:javascript
复制
sp.run([r"C:/Program Files/MIT/Kerberos/bin/klist", "-s"], ...)

或仅更新该进程的路径:

代码语言:javascript
复制
os.environ["PATH"] = r"C:\Program Files\MIT\Kerberos\bin;" + os.environ["PATH"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73215565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档