python-3.x - 比较文字字符串与 subprocess.Popen PowerShell 输出失败
问题描述
我有一个 Python3 脚本,它执行以下操作:
通过 subprocess.Popen,它运行一个 PowerShell 命令来检查 Active Directory 用户名是否存在;此命令将返回“Found”或“NotFound”
该命令的输出从字节转换为字符串并保存到名为“adNameExist”的变量中
adNameExist 与 if 语句中的文字字符串“NotFound”进行比较以决定下一步操作。
但是,无论 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)```
解决方案
所以我想出了如何让它发挥作用。我必须将 PowerShell 输出保留为字节,而不是将其转换为字符串。我删除了输出末尾的解码函数,并将其与值 b'NotFound\r\n' 和 b'Found\r\n' 进行比较。decode 函数显然有些奇怪,即生成的字符串无法与其他字符串进行比较。很奇怪......但任何阅读本文的人都可以认为这已解决!:)
推荐阅读
- html - CSS Grid:使用元素来包含网格元素?
- java - 找不到 KeyStore 的 DB2 DataSource 属性
- excel - OpenXML Pagesetup(PrintOptions、pageMargins、Orientation、headerfooter)错误
- asp.net-mvc - ASP.NET Core MVC 2.2 批量请求中间件
- java - JRE 11 在哪里?
- ios - ios 物理设备无法访问窗口机器上的 localhost
- javascript - 如何在 React 中运行 php 脚本
- angular - Webpack 和 TypeScript 上的 SignalR:找不到模块“./NodeHttpClient”
- javascript - 如何在 axios 中使用 Negotiate 或 Kerberos 身份验证?
- python - 使用来自 Django 后端的数据创建图表/图形的最有效方法是什么