lines = p.stdout.readlines(1024)
时间: 2024-03-29 20:36:54 浏览: 150
这是 Python 中使用 subprocess 模块获取外部命令输出的代码片段。其中,p 是一个 Popen 对象,表示外部命令的执行结果,p.stdout 表示命令的标准输出管道。调用 readlines(1024) 方法表示读取管道中的最多 1024 字节数据,返回的是一个包含输出内容的列表,每个元素是一行文本。如果管道中没有数据可读,则该方法会阻塞等待,直到有数据可读或者管道关闭。
相关问题
while not self.thread_stop: lines = [] lines = p.stdout.readlines(1024) if len(lines) != 0: with open(file_name, self.filemode) as f: for curline in lines: f.write(curline.strip().decode() + "\n") elif p.poll() is not None: logging.info("subprocess.Popen(monkey) is stopted time:%s" % util.get_current_time_format()) with open(file_name, self.filemode) as f: f.write("subprocess.Popen(monkey) is stopted time:%s \n" % util.get_current_time_format()) break print("in monkey run %s"%util.get_current_time_format())
这是一个使用Python的while循环,它会在子进程p没有停止的情况下不断地读取子进程的输出,并将其写入文件中。在每次读取输出时,它会检查读取的行数是否为0,如果不为0,就将每一行输出写入指定的文件中。如果读取的行数为0,则说明子进程已经退出,此时循环会被打破,同时在日志中记录子进程的退出时间。在循环的最后,会打印一条消息,用于指示当前代码正在运行。
Python 将以下脚本定义成一个函数以供调用:# 利用set进行去重 distinctComponentsList = list(set(componentsList)) #print(distinctComponentsList) # 与/conf文件夹下的dumpPath.properties文件内容进行匹配 dumpPropertiesPath = os.path.abspath("../../conf") #print("dump properties路径为:" + dumpPropertiesPath) # 读取dumpPath.properties文件内容 with open(os.path.join(dumpPropertiesPath, 'dumpPath.properties'), 'r') as f: lines = f.readlines() #print(lines) # 记录匹配到的内容 matchedPathList = [] matches = {} # 遍历每一行,进行模糊匹配 for line in lines: for s in distinctComponentsList: if line.startswith(s): #matchedPathList.append(line.split('=')[1].strip()) matches[s] = line.split('=')[1].strip() break #print(matchedPathList) #print(matches) # 路径拼接 scanlist = [] for key in matches: for item in componentsFileList: if item.startswith(key): scanlist.append(item + matches[key]) needScanPathList = [allComponentPath + "/" + path for path in scanlist] #print(needScanPathList) # 使用 subprocess 调用 inotify.py 脚本,并将 needScanPathList 作为参数传递 pathParam = ' '.join(needScanPathList) #print(pathParam) order = ('nohup python inotify.py ' + pathParam + ' >> output.log 2>&1 &') sys.stdout = open('output.log', 'w') result = os.system(order)
你可以将以上脚本封装成一个函数,如下所示:
```python
import os
def start_inotify(componentsList, componentsFileList, allComponentPath):
distinctComponentsList = list(set(componentsList))
dumpPropertiesPath = os.path.abspath("../../conf")
with open(os.path.join(dumpPropertiesPath, 'dumpPath.properties'), 'r') as f:
lines = f.readlines()
matchedPathList = []
matches = {}
for line in lines:
for s in distinctComponentsList:
if line.startswith(s):
matches[s] = line.split('=')[1].strip()
break
scanlist = []
for key in matches:
for item in componentsFileList:
if item.startswith(key):
scanlist.append(item + matches[key])
needScanPathList = [allComponentPath + "/" + path for path in scanlist]
pathParam = ' '.join(needScanPathList)
order = ('nohup python inotify.py ' + pathParam + ' >> output.log 2>&1 &')
sys.stdout = open('output.log', 'w')
result = os.system(order)
```
你可以将以上代码复制到你的 Python 脚本中,然后调用 start_inotify 函数,并将 componentsList、componentsFileList 和 allComponentPath 作为参数传递给它即可。
阅读全文