在使用Ubuntu 16.04LTS的python3中,我从主脚本创建了一个子进程,用于记录连接到本地机器的设备的测量值。我想知道当我想要完成数据记录时,如何向这个子流程发送消息,并切换到将测量值转储到csv文件。下面显示的是我到目前为止尝试的精简版本,但代码挂起,我无法转储我记录的测量结果。事实上,我只记录了1次测量。我不知道如何在记录数据时异步检查stdin输入。我能得到一些帮助吗
Main.py
# start subprocess
p_1 = subprocess.Popen(["./ekg.py", saveFilename_ekg], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# do other stuff
...
# send message to quit
message = str("1")
encMsg = message.encode()
print("Message:", encMsg.decode())
p_stdout = p_1.communicate(input=encMsg)[0]
# print "Done" from subprocess
print(p_stdout.decode('utf-8').strip())
# kill subprocess
p_1.kill()
ekg.py
def dumpLiveData(outputFile):
ekg = ekgClass()
dataMeasurements = []
for liveData in ekg.getLiveData():
# monitor stdin for message
if int(sys.stdin.read()) == 1:
break
else:
meas = [liveData.time, liveData.pulseWaveform]
dataMeasurements.append(meas)
#print ("Dumping data")
with open(outputFile, 'wb') as csvfile:
writer = csv.writer(csvfile, quoting=csv.QUOTE_NONNUMERIC)
#print ("Created text file")
header = ["Time", "Waveform value"]
writer.writerow(header)
for idx, val in enumerate(dataMeasurements):
writer.writerow(dataMeasurements[idx])
print("Done")
if __name__== "__main__":
# get parameters
parser = argparse.ArgumentParser(description="ekg.py")
parser.add_argument("outputFile", help="Output CSV file.")
# parse
args = parser.parse_args()
# record and dump measurements
dumpLiveData(args.outputFile)
通过向子流程发送control+C事件解决了此问题。try-except-else块捕捉到键盘中断并对其进行处理,然后我优雅地退出该块。退出后,我将记录的数据写入csv文件
main.py
ekg.py
相关问题 更多 >
编程相关推荐