使用子进程

时间:2016-01-29 13:02:18

标签: python logging subprocess

当我在Python-Skript上执行命令(同时为true;执行日期;睡眠1;完成)时,没有任何内容显示,也没有记录。

import logging
import sys
import subprocess as SP


logger = logging.getLogger('logging')
logger.setLevel(logging.INFO)

if not logger.handlers:
    log_handler = logging.FileHandler('test_logging.log')
    formatter = logging.Formatter('%(asctime)s %(message)s')
    log_handler.setFormatter(formatter)
    logger.addHandler(log_handler)
    log_handler.setLevel(logging.INFO)

command = 'while true; do date; sleep 1; done'
p = SP.Popen(command, shell=True, stdout=SP.PIPE, stderr=SP.PIPE)
print p.stdout.readlines()

for line in p.stdout.readlines():
    logger.info(line)
    print line

2 个答案:

答案 0 :(得分:1)

$("html").on("click", ".mainNav", function (e) { if(e.target.className == "mainNav"){ $(".dropdown-content:visible").slideToggle(200); } }); 尝试在列表中读取命令输出的所有行,由于命令是无限循环,因此永远不会完成:p.stdout.readlines()

如果您使用的是Python 2,那么迭代输出行的一种方法可能是:

'while true; do date; sleep 1; done'

在Python 3中,您可以简单地遍历for line in iter(p.stdout.readline, b''): print line.rstrip() 文件对象。

答案 1 :(得分:1)

这对我有用(在Python 2.6.6上)

import subprocess as SP
command = 'while true; do date; sleep 1; done'
p = SP.Popen(command, shell=True, bufsize=1, stdout=SP.PIPE, stderr=SP.PIPE)
while True:
    print p.stdout.readline()

bufsize=1并非必不可少,但它会启用线路缓冲,这样可以提高效率。