Terminal
將執行終端輸出保存為變數
我正在執行一個使用
pyserial
包的 python 腳本。我使用一塊板來控制電機旋轉,並通過 USB 埠連接。該板已經程式,可以使用給定的命令旋轉電機。下面是一些例子:
- 輸入:檢查電機狀態的命令:H010100
輸出 :
{ .."beambreak": [0,0,0,0,0], .."prox": [0.003,0.003], .."T1": [0,0], .."T2": [0,0], .."MT": [-1,-1] .."test_switch": 0, .}
- 輸入:指令旋轉電機一次:H010101
輸出:{“旋轉”:“成功”}
任務:在’while’循環中,如何每1分鐘發送一次命令(例如H010101),檢查輸出消息(例如{“Rotate”:“Successful”})並根據輸出消息條件發送下一個命令。
問題:當我執行程式碼時,“可以設置”輸出消息出現在 linux 終端/IDE 控制台中,但我不知道將消息保存為變數並將其應用於循環條件。我的意思是,要檢查消息是否是相同的消息,等待 1 分鐘並再次發送 H010101 命令?
我也嘗試將文件保存在 *.log 或 *.txt 但沒有工作範例:
$ python test.py >> *.txt $ python test.py > *.log
這是我的程式碼:
import time import serial # configure the serial connections ser = serial.Serial( port='/dev/ttyUSB0', baudrate=115200, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS ) while True : print(' Check Status') ser.write('H010000\n'.encode()) status_cmd = ser.readline() print(status_cmd) if status_cmd === "test_switch: 0 " : # i can't save the message as variable from running terminal time.sleep(5) # Command to rotate motor ser.write('H010101\n'.encode()) # read respond of give command reading = ser.readline() print(reading) if reading == {"Drop":"Successful"} : # i can't save the message as variable from running terminal time.sleep(60) # rotate motor ser.write('H010101\n'.encode()) # read respond of give command reading = ser.readline() print(reading)
您可以做的第一件事是將函式封裝到方法中(如果您願意,也可以使用類)
檢查狀態
def check_status(ser): print('Check Status') ser.write('H010000\n'.encode()) current_status = ser.readline().decode('utf-8') return current_status
旋轉電機
def rotate_motor(ser): print('Rotating ..') ser.write('H010101\n'.encode()) rotation_status = ser.readline().decode('utf-8') return rotation_status
您還需要導入 json 以將響應載入為 dict
例如
>>> import json >>> rotation_status='{"Drop":"Successful"}' >>> json.loads(rotation_status) {'Drop': 'Successful'}
現在您已經準備好這些程式碼,您可以呼叫它們以根據結果持續執行操作
while True: status = json.loads(check_status(ser)) if status['test_switch'] == 0: time.sleep(5) is_rotated = json.loads(rotate_motor(ser)) if is_rotated['Drop'] == 'Successful': time.sleep(60) else: print('Something went wrong') raise Exception(is_rotated)