我需要一些帮助来理解windows cmd/ps的行为,以及如何在python上处理它。
如果我在命令提示符上运行"klist“,或者在任何文件夹上运行PowerShell (PS),我会得到以下响应:
C:\>klist
A Identificação de Logon atual é 0:0x249a0c1
Tíquetes em Cache: (0)如果我在MIT文件夹下运行klist (C:\Program \MIT\Kerberos\bin),我将得到这个响应(在任何情况下我都期望得到这个响应)
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)At :为什么CMD和PS在MIT文件夹中运行klist可执行文件时行为不同?
At Second:如何将窗口“默认”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 FalseAt Third:如何将上面的python设置为运行“正确”的klist (假设我无法更改windows默认行为)?
发布于 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文件的完整路径:
sp.run([r"C:/Program Files/MIT/Kerberos/bin/klist", "-s"], ...)或仅更新该进程的路径:
os.environ["PATH"] = r"C:\Program Files\MIT\Kerberos\bin;" + os.environ["PATH"]https://stackoverflow.com/questions/73215565
复制相似问题