0
我一直在敲打我的頭靠在這裏牆上...錯誤嘗試正則表達式python3子命令輸出
我想從一個python腳本中運行特定的CLI命令,然後正則表達式,它的輸出時。但我得到以下錯誤:
"File "speedtestcork.py", line 18, in regex_speedtest
for line in data.split("\n"):
TypeError: Type str doesn't support the buffer API"
這裏是我的短代碼:
import time
import re
import speedtest_cli
import subprocess
def regex_speedtest(data):
#output, errors = data.communicate()
#output1 = str(output)
Down_Regex = re.compile(r'(Download:).(\d+\.\d+).(Mbit/s)')
Up_Regex = re.compile(r'(Upload:).(\d+\.\d+).(Mbit/s)')
for line in data.split("\n"): # code seems to break at this line.
print(line)
#Downmatch = Down_Regex.search(line)
#Upmatch = Up_Regex.search(line)
#return (Downmatch.group(2), Upmatch.group(2))
while True:
now = time.strftime("%H:%M:%S %d %m %Y")
process = subprocess.Popen(["speedtest-cli", "--server", "2432"], shell=True, stdout=subprocess.PIPE)
output, errors = process.communicate()
down, up = regex_speedtest(output)
這應該是簡單的調試,但我不能找到解決方案。
使用以下的職位,但仍然無法解決:提前
Regex woes with Subprocess output
感謝,
保羅
或者你可以使用'data.split(b'\ n')',因爲問題僅僅是'split'調用中'str'和'bytes'的混合。 – Duncan
正則表達式匹配也會失敗,請嘗試're.compile(「foo」).search(b「foo」)'。 –
是的,我並沒有抱怨你的答案的部分,只是你暗示'.split()'實際上不適用於字節。 (不是說使用'.splitlines()'也是有問題的)。 – Duncan