Python控制台在调用子进程之前不打印

Python控制台在调用子进程之前不打印,python,terminal,Python,Terminal,以下是我的代码片段: for directory in (projects + non_promote_projects): os.chdir(directory) print_color("Running " + " ".join(ant_command) + " in " + os.getcwd(), "cyan", newline=False) print_color(" ... ", "gray", newline=False)

以下是我的代码片段:

for directory in (projects + non_promote_projects):
        os.chdir(directory)
        print_color("Running " + " ".join(ant_command) + " in " + os.getcwd(), "cyan", newline=False)
        print_color(" ... ", "gray", newline=False)

        ant_process = subprocess.call(ant_command, stdout=subprocess.PIPE)

        if ant_process != 0:
            print_color("Failure!", "red")
            print_color("Error running " + " ".join(ant_command) + " in " + os.getcwd(), "red")
            sys.exit(1)
        else:
            print_color("Success!", "gold")

        os.chdir(current_dir)

我基本上只是在一些目录中运行一些ant命令。问题是,在调用子进程之前,我的第一个
print\u color
语句和第二个语句没有打印。我感觉在子流程开始之前,没有足够的时间将其打印到控制台。如果是这种情况,我如何确保它在对ant的子进程调用开始之前打印?

您需要手动调用
sys.stdout.flush()


您需要手动调用sys.stdout.flush()


我正在猜测您的
print\u color
函数,但您设置了
newline=False
。控制台输出是行缓冲的,这意味着您需要发送新行或刷新它。假设您确实希望打印结束一行,请将其更改为
newline=True
(或可能完全删除该参数)以获取该行。

我正在猜测您的
print\u color
函数,但您设置了
newline=False
。控制台输出是行缓冲的,这意味着您需要发送新行或刷新它。假设您确实希望打印结束一行,请将其更改为
newline=True
(或可能完全删除该参数)以获取该行。

可能是缓冲。一个选项是,您可以使用
python-u
调用脚本以取消缓冲。与上面的注释相关,
newline=False
可能意味着结果永远不会刷新。作为缓冲和交互性之间的折衷,缓冲区通常在newline上刷新。它可能是缓冲。一个选项是,您可以使用
python-u
调用脚本以取消缓冲。与上面的注释相关,
newline=False
可能意味着结果永远不会刷新。作为缓冲和交互性之间的折衷,在newline上经常刷新缓冲区。你对我的打印颜色方法的看法完全正确,它起作用了。你对我的打印颜色方法的看法完全正确,它起作用了。
import sys
import subprocess

sys.stdout.write('\033[1;32;40m111 \033[0m')
sys.stdout.flush() #try comment this line and see the difference
subprocess.call(["sleep","10"], stdout=subprocess.PIPE)
print 222