我是 python 新手。如果它太简单,请原谅我。我只想date
在 python 中使用命令提取日期
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
在开始时。
>>> 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
b
表示它是一个二进制字符串,你可以通过output.decode('ascii')
. 要摆脱尾随换行符:
output = output.strip()
output = output.decode('ascii')
print(output)
托马斯的回答是正确的,但我觉得需要更多的解释。
我总是或等人.decode('utf8')
的结果。这是因为stdout/stdin 始终以二进制模式打开,除非您明确提供文件句柄,因此您始终接收/发送字节,而不是str。p.communicate()
check_output()
在这种情况下,我建议只使用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')