如何从python中的日期命令输出中删除不必要的字符

时间:2013-05-14 06:17:14

标签: python linux shell command

我是python的新手。请原谅我,如果它太简单了。我想在python

中使用date命令仅提取日期
import subprocess

p = subprocess.Popen(["date", '+%m/%d/%y'], stdout=subprocess.PIPE)

output,err = p.communicate()

print (output)

现在正在打印

b'05/14/13\n'

如何在开始时删除不必要的'\ n'和b

3 个答案:

答案 0 :(得分:2)

>>> str(b'05/14/13\n').rstrip()
'05/14/13'

速度比较:

>>> import timeit
>>> timeit.timeit(r"b'05/14/13\n'.decode('ascii').rstrip()")
0.7801015276403488
>>> timeit.timeit(r"str(b'05/14/13\n').rstrip()")
0.2503617235778428

答案 1 :(得分:1)

b表示它是二进制字符串,您可以通过output.decode('ascii')获取unicode字符串。要删除尾随换行符:

output = output.strip()
output = output.decode('ascii')
print(output)

答案 2 :(得分:1)

托马斯的回答是正确的,但我觉得有必要做出更多解释。

我总是.decode('utf8') p.communicate()check_output()等人的结果。这是因为 stdout / stdin始终以二进制模式打开,除非您明确提供文件句柄,因此您始终接收/发送字节,而不是 str

在这种情况下,我建议只使用check_output(['date','+%m/%d/%y'])而不是创建一个Popen对象,然后基本上扔掉它。)

所以,我建议将其重写为:

import subprocess
result = subprocess.check_output(['date', '+%m/%d/%y']).decode('utf8').rstrip()
print (result)

在更元的层面上,存在一个问题,即您是否需要使用subprocess来执行此任务。 毕竟,格式化日期/时间有time.strftime()。这样:

import time
print(time.strftime('%m/%d/%y'))

以更简单的方式实现整个计划的预期效果。

同样来自tink的评论:

 import datetime 
 print datetime.date.today().strftime('%m/%d/%y')