我正在尝试用我的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)
答案 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")' ...