我有一个 Python 脚本,它首先杀死所有hostapd进程,然后启动一个新进程。我想捕获hostapdstart 命令的输出以确定它是否返回,AP-ENABLED或者AP-DISABLED我决定将它写入一个临时文件然后读取它。但是open()无限期挂起,或者直到我使用 ctrl-c; 程序没有退出,而是吐出我期望的输出:Line #0: Configuration file: /etc/hostapd/hostapd.confLine #1: Failed to create interface mon.wlan0: -95 (Operation not supported)Line #2: wlan0: interface state UNINITIALIZED->COUNTRY_UPDATELine #3: wlan0: Could not connect to kernel driverLine #4: Using interface wlan0 with hwaddr b8:27:eb:35:34:de and ssid "Coriolis"Line #5: random: Only 6/20 bytes of strong random data available from /dev/randomLine #6: random: Not enough entropy pool available for secure operationsLine #7: WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connectsLine #8: wlan0: interface state COUNTRY_UPDATE->ENABLEDLine #9: wlan0: AP-ENABLED代码:import subprocessimport osimport sysdef start_hostapd(): # kill any existing hostapd process subprocess.call(['killall', 'hostapd']) # start new hostapd process os.system('hostapd /etc/hostapd/hostapd.conf > ./hostapd.log') # capture the output line_num = 0 with open('hostapd.log', 'r') as file: for line in file: print('\nLine #{}: {}'.format(line_num, line)) line_num += 1 # sys.stdout.flush()if __name__ == '__main__': start_hostapd()我尝试添加sys.stdout.flush()但无济于事。
2 回答
慕森卡
TA贡献1806条经验 获得超8个赞
好的,我会解释你为什么你在这里有问题。
hostapd
守护进程也是如此(看名称中的最后一个d,大多数 linux 守护进程都有)。
因此,您正在尝试使用os.system
. 在文档中,我检查了这个函数是否产生并返回进程返回代码。但是要获得返回码,os.system
必须等待守护进程完成。所以这就是它挂在这里的原因。
作为解决方案。我建议生成具有一些无等待功能的守护进程,例如os.spawn
使用os.P_NOWAIT
标志。
添加回答
举报
0/150
提交
取消