python - 在 Python 中的 subprocess.Popen 中指定标准输出中的文本类型
问题描述
首先抱歉,如果标题没有尽可能描述性,很难解释。
我已经对批处理进行了子流程调用,并将所有内容重定向到 python 控制台print()
,执行的批处理打印信息消息,并且我需要打印自定义消息,前提是批处理消息是确定的消息。但在某种程度上,python 检测到这不是同一个字符串。
我不知道它是否是编码问题(我对 in 进行编码readline
以iso-8859-1
避免 的编码错误utf-8
)。
这是我的代码。
from tkinter import *
from tkinter import ttk
from subprocess import Popen, PIPE
import os
gui = Tk()
text = Text(gui)
lb = ttk.Label(text="My bat")
cmd = 'C:\\Users\\User\\Desktop\\BAT1.bat'
def runbat():
proc = Popen(cmd,shell=False,stdout=PIPE)
while True:
line = proc.stdout.readline().decode('iso-8859-1').rstrip('\n')
if line != '':
myline = 'INFO Starting: Initialize communication activity (InitializeCommunication).'
if line == myline:
print("That's the line!")
print(line)
else:
break
bt = ttk.Button(text="Run bat", command=runbat).grid(row=4, column=5)
text.grid(row=6, column= 5)
lb.grid(row=3, column=5)
prog.grid(row=7,column=5)
mainloop()
这是输出:
C:\Python34\python.exe "C:/Users/User/Documents/Desarrollo/Boos Production Manager/preferences/multioneproof.py"
C:\Users\User\Documents\Desarrollo\Boos Production Manager\preferences>cd /D C:
C:\Users\User\Documents\Desarrollo\Boos Production Manager\preferences>cd C:\Program Files\Philips MultiOne Workflow
C:\Program Files\Philips MultiOne Workflow>MultiOneWorkflow.exe /f "C:/Users/User/Desktop/A.xml" /w "Z:\Spain Factory\multione configuration\verify.txt" /p S /lu true /v info /c Halt
WARN Parameter IncludeUniqueIdOfDeviceInLabelData is provided without the GenerateAndExportLabelData parameter.
INFO Philips MultiOne Workflow version 3.11.91.28
INFO OS: Microsoft Windows 10 Home. Computer name: PC-DAVID. Application path: C:\Program Files\Philips MultiOne Workflow\MultiOneWorkflow.exe. Running as administrator: no. Format: Espa¤ol (Espa¤a) [es-ES], date format: dd/MM/yyyy, right to left: no, decimal separator: [,].
INFO Key: N/A. Profile: Debug. TwelveNc: N/A.
INFO Privileges: 0-10V / 1-10V: All. 0-10V / 1-10V (LED Driver): All. ActiLume: All. ActiLume wired: All. ActiLume wireless: All. Active Cooling: All. Adjustable Light Output: All. Adjustable Light Output Minimum: All. Adjustable Output Current: All. Adjustable Output Current Multi-Channel: All. Adjustable Startup Time: All. AmpDim: All. Coded Light: All. Coded Light Pwm: All. Coded Light Randomize: All. Coded Mains Scene Settings: All. Coded Mains Standalone Receiver: All. ComBox: All. Constant Light Output: All. Constant Light Output LITE: All. Constant Light Output Multi-Channel: All. Correlated Color Temperature Dual Channel: All. Correlated color temperature: All. Corridor Mode: All. DALI 102 variables: All. DALI Power Supply: All. DC Emergency: All. Dali 202 variables: All. Daylight override / Daylight switching: All. Device Info: All. Diagnostics: All. Diagnostics Emergency: All. Diagnostics Motor Controller: All. Dimming Interface: All. Driver Addressing: All. Driver Temperature Limit: All. Dwell Time: All. Dynadimmer: All. Emergency: All. End Of Life indication: All. Energy Meter: All. FCC Test Mode Settings: All. Factory link: All. Field Task Tuning: All. Field Task Tuning/Occupancy Sensing/Daylight Harvesting: All. Lamp Burn-in: All. Lamp selection: All. Late Stage Configuration: All. Light Source Age: All. LineSwitch: All. Load Fault Indicator Thresholds: All. Logical Signal Input: All. Lumen Level: All. LumiStep: All. Luminaire (Fixture) Information: All. Luminaire Production Test: All. Min dim level: All. Module Temperature Protection: All. Motor Control: All. NTC on LedSet: All. OEM Write Protection: All. Occupancy / Daylight: All. Occupancy sharing / Group light behavior: All. PowerBox: All. Push Button Unit LCU2070: All. Push Button Unit LCU2071: All. Quick Lamp Start: All. Relay Switched Output: All. SR Power Supply: All. Set Lamp uptime: All. Step Dimming: All. Touch and Dim: All.
INFO On warnings: halt
INFO Using Write&Verify.
INFO Multiple device configuring: Disabled
INFO Commission all: Disabled
INFO Check device model: Enabled
INFO DALI factory new: Disabled
INFO Starting: Prepare system activity (PrepareSystem).
INFO Success: Prepare system activity (PrepareSystem).
INFO Starting: Select feature file activity (OpenFile).
INFO Opening features file
INFO Provided file: c:/users/user/desktop/a.xml
INFO Success: Select feature file activity (OpenFile).
INFO Starting: Initialize communication activity (InitializeCommunication).
INFO Success: Initialize communication activity (InitializeCommunication).
INFO Starting: Identify device activity (IdentifyDevice).
INFO Devices identified: 0
ERROR No connected devices were found
ERROR Failure: Identify device activity (IdentifyDevice).
INFO Starting: Stop activity (Stop).
INFO Success: Stop activity (Stop).
INFO End
C:\Program Files\Philips MultiOne Workflow>echo 500 1>"Z:\Spain Factory\multione configuration\log.txt"
Process finished with exit code 0
所以我认为当涉及到正确的行时,它必须打印我的自定义句子,但由于某种原因它没有这样做。
解决方案
if line != '' :
myline = 'INFO Starting: Initialize communication activity (InitializeCommunication).'
if str(myline) in str(line) :
print("That's the line!")
print(line)
else :
break
在这个你的'line'变量值有额外的尾随空格,这不在'myline'变量中,这就是为什么你等于if条件失败的原因,如果你在条件中使用它会解决这个问题。
推荐阅读
- xamarin - 如何阅读 Xamarin 页面中的所有标签以将它们保存到 SQlite 中?
- python - 如何在 tkinter 上获取帧的行
- sql - DB2 - 如何检索从末尾开始的最后一个子字符串
- qt - 2021 年用“补丁 Qt”编译 wkhtmltopdf
- serverless-framework - 如何在不使用 serverless-pseudo-parameters 插件的情况下在无服务器框架中使用或引用 AWS::AccountId?
- python - Windows 上的不同 Python 与 Anaconda/PyCharm
- vscode-settings - 未提交的更改“折叠箭头”颜色 VSCode
- android - Expo 应用程序卡在启动画面(仅限 Android)
- python - 使用 pandas 获取重复统计信息(如缺失值)的优雅方法
- c# - dapr getall:怎么做?