[英]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.