我是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
。
答案 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')