Python的subprocess.call()和Bash流在语义上是不同的吗?

时间:2015-03-13 23:01:46

标签: python bash unix

来自bash:

$ python script.py < input.txt 2> stderr.txt > stdout.txt

在Python中:

import subprocess
subprocess.call(["python", "script.py"],
                stdin=open('input.txt', 'rb'),
                stdout=open('stdout.txt', 'wb'),
                stderr=open('stderr.txt', 'wb'))

假设有效input.txtpython有效并且在路径等中,这些行为与简单情况相同。

是否存在shell版本的行为与Python版本不同的情况?

1 个答案:

答案 0 :(得分:1)

  

是否存在shell版本的行为与Python版本不同的情况?

这取决于你的想法。程序执行和流重定向在shell行中完成与Python脚本完全相同的操作。另一方面,shell会对子进程执行一些其他更改,例如将其放入新进程组并将其作为终端上的前台进程组。

编辑:要进入评论的上下文,的差异,但过程组更改是我能立即想到的唯一一个,至少。这确实是一个非常小的差异,没有任何那些不能做相当先进的工作控制的程序会受到影响。至少,内存限制或任何性能影响肯定没有变化。一般来说,至少在浩大的大多数程序中都没有差异。

当然,您也可以在Python中执行相同的流程组更改:请参阅os.setpgid()os.tcsetpgrp()