Python os.system:命令的顺序
为什么调用带有内容的文件Python os.system:命令的顺序,python,python-3.x,git-bash,python-os,Python,Python 3.x,Git Bash,Python Os,为什么调用带有内容的文件a.py import os print('Hi') os.system('cat a.py') 生成以下输出,如何让它们以正确的顺序打印 $ python a.py import os print('Hi') os.system('cat a.py') Hi 您可以看到,cat命令在print之前打印到stdout。在Windows 10上的GitBash中运行Python 3.6时发生。在Ubuntu 17.10上,Python3.6不会发生吗 注意:我知道我可
a.py
import os
print('Hi')
os.system('cat a.py')
生成以下输出,如何让它们以正确的顺序打印
$ python a.py
import os
print('Hi')
os.system('cat a.py')
Hi
您可以看到,cat
命令在print
之前打印到stdout。在Windows 10上的GitBash中运行Python 3.6时发生。在Ubuntu 17.10上,Python3.6不会发生吗
注意:我知道我可以轻松地用
file.readlines()
之类的东西打印文件内容。这只是一个简单的例子。然而,当运行更复杂的东西时,理解为什么会发生这种情况以及如何避免这种情况变得非常重要。您必须刷新此缓冲区:
import os
import sys
print('Hi')
sys.stdout.flush()
os.system('cat a.py')
这是一种更干净的方法
from subprocess import check_output
print check_output(['cat', 'a.py'])
你不能调用
python-u
来取消缓冲吗?你能解释一下为什么它在Ubuntu上工作而不刷新吗?通常情况下,当stdout连接到终端时,输出会被行缓冲(因此行终止符会导致Hi
输出被自动刷新),但是Git Bash可能会改变一些事情。好的,可能会猜到这和GitBash有关。这就是我使用Windows所得到的为什么不使用子流程.Popen
<代码>操作系统不应使用。subprocess.Popen
的行为保证在所有方面都是相同的OS@user1767754:尽管如此,子流程的行为并没有什么不同。这不会改变任何事情。因此,您是说,这将产生相同的结果?除非它出于某种原因对Python脚本的输出缓冲进行处理,它将产生与os.system
代码相同的结果。