首页 > 解决方案 > 比较文字字符串与 subprocess.Popen PowerShell 输出失败

问题描述

我有一个 Python3 脚本,它执行以下操作:

但是,无论 PowerShell 输出返回 Found 还是 NotFound,adNameExist 永远不会等于我的 if 语句中的条件。

我通过 tkinter GUI 中的按钮调用 PowerShell 命令。输入来自多行文本框(变量“userInputTextbox”)。

我认为问题可能是编码或 PS 输出上的回车,但我修复了两者都无济于事。

def runAddUser():
    inputCORPUserNames = userInputTextbox.get('1.0', 'end-1c').split()



    for f in range(len(inputCORPUserNames)):
        adNameExist = (subprocess.Popen(['powershell.exe', 'if (dsquery user -samid %s){"Found"} else{"NotFound"}' % (inputCORPUserNames[f])],stdout=subprocess.PIPE).communicate()[0].decode('utf-8'))[:-1]
        print(adNameExist) # This returns 'Found' or 'NotFound'
        print(type(adNameExist)) # This returns <class 'str'>



        if adNameExist == 'NotFound':
            print('User ' + inputCORPUserNames[f] + ' does NOT exist!')
        elif adNameExist == 'Found':
            print('User ' + inputCORPUserNames[f] + ' exists!')



button = Button(window, text="ADD USER(S)", font = "Helvetica 12 bold", command=runAddUser).grid(row = 6, column = 0, columnspan = 2)```

标签: python-3.xpowershell

解决方案


所以我想出了如何让它发挥作用。我必须将 PowerShell 输出保留为字节,而不是将其转换为字符串。我删除了输出末尾的解码函数,并将其与值 b'NotFound\r\n' 和 b'Found\r\n' 进行比较。decode 函数显然有些奇怪,即生成的字符串无法与其他字符串进行比较。很奇怪......但任何阅读本文的人都可以认为这已解决!:)


推荐阅读