1

我是 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在开始时。

4

3 回答 3

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
于 2013-05-14T06:22:30.010 回答
1

b表示它是一个二进制字符串,你可以通过output.decode('ascii'). 要摆脱尾随换行符:

output = output.strip()
output = output.decode('ascii')
print(output)
于 2013-05-14T06:22:40.647 回答
1

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

我总是或等人.decode('utf8')的结果。这是因为stdout/stdin 始终以二进制模式打开,除非您明确提供文件句柄,因此您始终接收/发送字节,而不是strp.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') 
于 2013-05-14T06:38:09.163 回答