Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python os.system:命令的顺序_Python_Python 3.x_Git Bash_Python Os - Fatal编程技术网

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
代码相同的结果。