Python: why print statements and subprocess.call()

2019-05-07 12:49发布

问题:

I am running the following piece of code (call it batch.py)

for config in keystoneConfig: 
    cmdlist = generate_cmd_list(config)
    print ' '.join(cmdlist)
    subprocess.call(cmdlist)

And redirecting the output of batch.py to another file. i.e.

./batch.py > output.txt

But I realize that all the output from subprocess.call() goes before the print statement. Why is the output out of sync?

回答1:

Python is block buffering its own output and not flushing it before subprocess.call(), because you redirected its output to a file instead of the console; you would need to force line buffering or disable buffering, or manually flush before the subprocess call.