繁体   English   中英

使用subprocess.call的Python执行顺序

[英]Python execution order using subprocess.call

我在文件abc.py中有以下代码:

import subprocess
def evaluate():
    for i in range(5):
        print("Printing", i)
        subprocess.call(['ls', '-lrt'])
        print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
evaluate()

现在,当我使用python abc.py> out.dat进行调用时,输出文件包含“ ls -lrt”的结果五次,然后在代码中打印语句。 为什么会这样,如果我需要获得输出,我应该怎么做:

printing 0

(results of ls -lrt here)

~~~~~~~~~~~~~~~~~~~~~~~

printing 1

.
.
.

等等..?

谢谢..

您需要先刷新流,然后再调用子流程:

import subprocess, sys
def evaluate():
    for i in range(5):
        print("Printing", i)
        sys.stdout.flush()
        subprocess.call(['ls', '-lrt'])
        print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
evaluate()

只要您写入终端,刷新就会自动逐行进行(无需重定向)。 然后您不会注意到问题,因为print()在换行符处刷新。

一旦将输出重定向到文件, print()语句就会注意到这一点,并且仅在某个缓冲区已满时(并且在终止时)自动刷新。

子进程( ls )相同,但使用其自己的缓冲区。 并且它首先终止,因此其输出首先在文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM