Python sp=subprocess.Popen()的优点-->;sp.communicate()与subprocess.call()的比较
大约4个月前,我写了一个我经常使用的func,我记不起为什么我会这样分割东西:Python sp=subprocess.Popen()的优点-->;sp.communicate()与subprocess.call()的比较,python,scripting,sysadmin,Python,Scripting,Sysadmin,大约4个月前,我写了一个我经常使用的func,我记不起为什么我会这样分割东西: def call_sp(command, **arg_list): #run that beast p = subprocess.Popen(command, shell=True, **arg_list) p.communicate() 我阅读了子流程上的文档,看到call()基本上做了相同的事情。不记得那天发生了什么,除了上面的func和subprocess.call([“mycomma
def call_sp(command, **arg_list):
#run that beast
p = subprocess.Popen(command, shell=True, **arg_list)
p.communicate()
我阅读了子流程上的文档,看到call()基本上做了相同的事情。不记得那天发生了什么,除了上面的func和subprocess.call([“mycommand”]),还有python系统管理员知道在使用上有什么有意义的区别吗?我看到我的func没有返回任何退出状态,正在检查命令是否有效是call()的唯一区别/优势吗?这是我今天看到的
In [4]: subprocess.call(['echo $HOME'], shell=True)
/home/cchilders
Out[4]: 0
In [5]: %paste
def call_sp(command, **arg_list):
#run that beast
p = subprocess.Popen(command, shell=True, **arg_list)
p.communicate()
## -- End pasted text --
In [6]: call_sp('echo $HOME')
/home/cchilders
感谢
调用
是Popen
典型用例的一个方便功能。在本例中,使用它比使用Popen
构造函数更简单,因为您没有使用已执行命令的输出
如果需要与正在运行的子进程交换一些数据,或者需要进一步处理命令输出(stdout、stderr)Popen
和communicate
如果您对调用的成功感兴趣,那么还有另一个便利函数
check\u call
,如果执行的进程以非零状态退出,它将引发异常。call
是Popen
的典型用例的便利函数。在本例中,使用它比使用Popen
构造函数更简单,因为您没有使用已执行命令的输出
如果需要与正在运行的子进程交换一些数据,或者需要进一步处理命令输出(stdout、stderr)Popen
和communicate
如果您对调用的成功感兴趣,那么还有另一个便利函数
check\u call
,如果执行的进程以非零状态退出,它将引发异常。call
是Popen
的典型用例的便利函数。在本例中,使用它比使用Popen
构造函数更简单,因为您没有使用已执行命令的输出
如果需要与正在运行的子进程交换一些数据,或者需要进一步处理命令输出(stdout、stderr)Popen
和communicate
如果您对调用的成功感兴趣,那么还有另一个便利函数
check\u call
,如果执行的进程以非零状态退出,它将引发异常。call
是Popen
的典型用例的便利函数。在本例中,使用它比使用Popen
构造函数更简单,因为您没有使用已执行命令的输出
如果需要与正在运行的子进程交换一些数据,或者需要进一步处理命令输出(stdout、stderr)Popen
和communicate
如果您对调用的成功感兴趣,那么还有另一个方便的函数check\u call
,如果执行的进程以非零状态退出,它将引发异常。子进程。call(…)
本质上是Popen(…)。wait()
不同于Popen(…)。communicate()
如果重定向子进程的任何标准流,例如,stdout=PIPE
或者如果需要退出状态
是一个方便的函数,它构建在Popen()
提供的接口之上。如果call()
适用于您的情况;使用它。如果它不起作用;考虑其他方便函数,如:代码>子进程.CHECKOUTPUTPUTE()/代码>,然后直接使用<代码> PONEN()/<代码> .< /P>
一般来说,编写一个方便的函数在您的案例中工作是一个好主意(尽管您的特定示例不太有用)Popen()
可以做很多事情,一个限制其功能的方便函数使代码更易于维护
不要调用p.communicate()
,除非需要传递输入,否则从子流程获取输出。不要使用shell=True
,除非您完全控制命令
参数。子进程。调用(…)
本质上是Popen(…)。wait()
与Popen(…)不同。如果重定向子进程的任何标准流,例如。,stdout=PIPE
或者如果需要退出状态
是一个方便的函数,它构建在Popen()
提供的接口之上。如果call()
适用于您的情况;使用它。如果它不起作用;考虑其他方便函数,如:代码>子进程.CHECKOUTPUTPUTE()/代码>,然后直接使用<代码> PONEN()/<代码> .< /P>
一般来说,编写一个方便的函数在您的案例中工作是一个好主意(尽管您的特定示例不太有用)Popen()
可以做很多事情,一个限制其功能的方便函数使代码更易于维护
不要调用p.communicate()
,除非需要传递输入,否则从子流程获取输出。不要使用shell=True
,除非您完全控制命令
参数。子进程。调用(…)
本质上是Popen(…)。wait()
与Popen(…)不同。如果重定向子进程的任何标准流,例如。,stdout=PIPE
或者如果需要退出状态
是一个方便的函数,它构建在Popen()
提供的接口之上。如果call()
适用于您的情况;使用它。如果它不起作用;考虑其他方便函数,如:代码>子进程.CHECKOUTPUTPUTE()/代码>,然后直接使用<代码> PONEN()/<代码> .< /P>
编写一个在y中工作的便利函数