我喜欢按需"记录"节目输出.例如.输出记录到终端,但另一个进程可以随时挂接当前输出.
经典的方式是:
myprogram 2>&1 | tee /tmp/mylog
Run Code Online (Sandbox Code Playgroud)
并按需提供
tail /tmp/mylog
Run Code Online (Sandbox Code Playgroud)
但是,这将创建一个不断增长的日志文件,即使在驱动器空间不足之前不使用它也是如此.所以我的尝试是:
mkfifo /tmp/mylog
myprogram 2>&1 | tee /tmp/mylog
Run Code Online (Sandbox Code Playgroud)
并按需提供
cat /tmp/mylog
Run Code Online (Sandbox Code Playgroud)
现在我可以随时阅读/ tmp/mylog.但是,任何输出都会阻塞程序,直到读取/ tmp/mylog.我喜欢fifo来刷新任何未读回的数据.怎么做?
我与一个命名管道进行通信,但我想在打开它之前检查它是否真的是命名管道.
我在谷歌检查,但没有任何东西,os.path.isfile()返回False,我真的需要检查它.
我正在尝试使用命名管道在守护程序和客户端之间建立双向通信.代码在尝试打开用于输入的命名管道时挂起为什么?
class comm(threading.Thread):
def __init__(self):
self.srvoutf = './tmp/serverout'
self.srvinf = './tmp/serverin'
if os.path.exists(self.srvoutf):
self.pipein = open(self.srvoutf, 'r')
#-----------------------------------------------------Hangs here
else:
os.mkfifo(self.srvoutf)
self.pipein = open(self.srvoutf, 'r')
#-----------------------------------------------------or here
if os.path.exists(self.srvinf):
self.pipeout = os.open(self.srvinf, os.O_WRONLY)
else:
os.mkfifo(self.srvinf)
self.pipeout = os.open(self.srvinf, os.O_WRONLY)
threading.Thread.__init__ ( self )
Run Code Online (Sandbox Code Playgroud) 我有以下python代码:
os.system("C:/Python27/python.exe C:/GUI/TestGUI.py")
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)
它运行命令正常,弹出一个窗口.但是,它不会退出第一个脚本.它只是停留在那里,我最终不得不强行杀死这个过程.没有错误产生.这是怎么回事?