我编写了这个简单的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
?
感谢。
答案 0 :(得分:2)
您真正需要的一个简单流程,例如调用no
,date
。我在下面的例子中输入了一个习惯列表,但这里没有必要,因为你只有一个元素/命令;即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)
您需要使用communicate
和PIPE
来获取输出:
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
表示执行命令时没有错误。