用Python实现每3秒钟读寄存器命令,使用os.system(cmd)的方式,总是终端输出正确但返回给变量是0,调试一圈才发现不是进制转换的问题,而是用错了方法,换到os.popen(cmd)就pass了
from datetime import datetime
import time
import os
def task():
now = datetime.now()
ts = now.strftime("%Y-%m-%d %H:%M:%S")
in = int(os.popen(cmd1_tcpin).read(), 16)
output_ch1 = int(os.popen(cmd2_output_ch1).read(), 16)
output_ch2 = int(os.popen(cmd3_output_ch2).read(), 16)
return str(ts) + ',' + str(in) + ',' + str(output_ch1 ) + ',' + str(output_ch2 )
def func():
with open('output.txt', 'w', encoding='utf-8') as writer:
while True:
writer.writelines(task() + '\n')
time.sleep(3)
那么python在与操作系统交互的两大方式os.system()和os.popen。
1、os.system(cmd)的返回值会有0(成功),1,2。若执行成功,那么会返回0,表示命令执行成功。否则,则是执行错误。
2、os.popen(cmd)执行命令后后通过一个管道文件将结果返回,再对其进行read()操作即可获得执行的输出
3、subprocess模块也可实现
import subprocess
result = subprocess.call('./more.sh')
print(result)