我有这个脚本检查并等待建立一些LAN连接:
import subprocess
import time
import os
import sys
sys.stdout = open('/home/pi/Desktop/file.txt', 'w')
print('checking LAN connections...')
time.sleep(2)
while(True):
f=open("/sys/class/net/eth0/carrier","r")
state=f.read()
if('1' in state):
print('LAN connection to target device established successfully !')
break
else:
print('Please establish LAN connection to the target device !')
time.sleep(4)
我希望能够在指定的日志文件中看到它的输出,但它仍然是空的。
答案 0 :(得分:1)
每次写入后刷新输出流。您似乎使用的是Python 3,因此您可以为flush
函数设置print()
参数:
print(msg, flush=True)
如果您使用的是Python 2,则可以使用sys.stdout.flush()
并编写日志记录功能:
def log(msg):
print msg
sys.stdout.flush()
也许更好的方法是使用logging
模块。这是一个非常简单的例子:
import logging
import time
logging.basicConfig(filename='/home/pi/Desktop/file.txt', level=logging.DEBUG)
for i in range(10):
logging.debug('Please establish LAN connection to the target device !')
time.sleep(4)
这将追加到该文件。如果要覆盖文件,请将filemode='w'
传递给basicConfig()
。
此外,如果您不喜欢DEBUG:root:
前缀,则可以使用format='%(message)s'
仅记录消息:
logging.basicConfig(filename='/home/pi/Desktop/file.txt', filemode='w', level=logging.DEBUG, format='%(message)s')
答案 1 :(得分:-1)
我相信你必须在每次写作后关闭它。 您可以实现这样的打印包装:
def print(textlog):
with open('/home/pi/Desktop/file.txt', 'a') as myfile:
myfile.write(textlog+"\n")
包装器的代码应如下所示:
import subprocess
import time
import os
def print(textlog):
with open('/home/pi/Desktop/file.txt', 'a') as myfile:
myfile.write(textlog+'\n')
print('checking LAN connections...')
time.sleep(2)
while(True):
f=open("/sys/class/net/eth0/carrier","r")
state=f.read()
if('1' in state):
print('LAN connection to target device established successfully !')
break
else:
print('Please establish LAN connection to the target device !')
time.sleep(4)
编辑:注意,使用w
打开文件将删除文件的所有内容并从头开始创建内容。如果要追加,可以使用a
。