在文件中添加时间戳,python subprocess linux

时间:2014-04-16 15:00:50

标签: python linux timestamp subprocess

我正在尝试用我的Raspicam在我的树莓上拍照,并为每张照片添加timestamp。我使用的代码不起作用。它在.."+%H...给出了语法错误 我已经在代码中乱逛并且能够执行一次,然后很难图片文件没有收到任何timestamp

有没有人知道我做错了什么?

#!/usr/bin/python

import RPi.GPIO as GPIO, time, os, subprocess, random

gpout = subprocess.check_output("stamp=$(date "+%H%M%S")", stderr=subprocess.STDOUT,shell=True)

gpout = subprocess.check_output("raspistill -t 1 --output /home/pi/photobooth_images/Test${stamp}.jpg", stderr=subprocess.STDOUT, shell=True)

2 个答案:

答案 0 :(得分:1)

至少有两个问题:

  • 要在Python字符串文字中使用双引号,您应该转义它们或使用单引号作为字符串文字:

    'stamp=$(date "+%H%M%S")'
    
  • 设置stamp shell变量是没有意义的,因为check_output()调用会产生自己的shell,即,stamp将不会在您尝试的第二个命令中定义使用它

你可以在Python中模仿date "+%H%M%S"

import time
from subprocess import check_output, STDOUT

timestamp = time.strftime('%H%M%S')
path = '/home/pi/photobooth_images/Test{stamp}.jpg'.format(stamp=timestamp)
gpout = check_output(["raspistill", "-t", "1", "--output", path], stderr=STDOUT)

注意:未使用shell=True

您还可以格式化现有的日期时间对象:

from datetime import datetime

path = '/path/to/Test{now:%H%M%S}.jpg'.format(now=datetime.now())

答案 1 :(得分:1)

您的语法错误基本上没有转义日期格式字符串周围的双引号。这就是导致错误的行所发生的事情:

gpout = subprocess.check_output("stamp=$(date "+%H%M%S")", stderr=subprocess.STDOUT,shell=True)
                                ^             ^       ^ ^
                    string begins    string ends      string begins and ends after )

您会注意到代码着色也表示这一点。 有两种方法可以在字符串中包含文字双引号:

要么逃避文字双引号

check_output("stamp=$(date \"+%H%M%S\")" ...

或使用单引号作为字符串分隔符

check_output('stamp=$(date "+%H%M%S")' ...