在Python中使用子进程模块

时间:2016-05-24 15:59:28

标签: python module subprocess

我编写了这个简单的Python脚本,可以找到当前的日期和时间:

import subprocess 
time = subprocess.Popen('date')
print 'It is ', str(time)

当我运行程序时,我得到以下内容:

It is  <subprocess.Popen object at 0x106fe6ad0>
Tue May 24 17:55:45 CEST 2016

如何在输出中摆脱这部分? <subprocess.Popen object at 0x106fe6ad0>

另一方面,如果我使用call(),如下:

from subprocess import call 
time = call('date')
print 'It is ', str(time)

我明白了:

Tue May 24 17:57:29 CEST 2016
It is  0

如何让Tue May 24 17:57:29 CEST 2016取代0。而且,为什么我们第一手拿到0

感谢。

2 个答案:

答案 0 :(得分:2)

您真正需要的一个简单流程,例如调用nodate。我在下面的例子中输入了一个习惯列表,但这里没有必要,因为你只有一个元素/命令;即subprocess.check_output

date

或只是

time = subprocess.check_output(['date'])

把它放在一起:

time = subprocess.check_output('date')

如果您有多个语句,例如可执行文件名后跟命令行参数,则列表是必需的。例如,如果您希望import subprocess time = subprocess.check_output(['date']) print 'It is', time 显示UNIX纪元,则无法传入字符串date,但必须使用"date +%s"

答案 1 :(得分:1)

您需要使用communicatePIPE来获取输出:

import subprocess 

time = subprocess.Popen('date', stdout=subprocess.PIPE, stderr=subprocess.PIPE)

output, errors = time.communicate()

print ('It is ', output.decode('utf-8').strip())

使用subprocess.call()0是返回值。 0表示执行命令时没有错误。