首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取gphoto2的当前状态

获取gphoto2的当前状态
EN

Stack Overflow用户
提问于 2016-07-27 14:29:50
回答 2查看 618关注 0票数 1

我使用--wait-event-and-download参数运行gphoto,这样我用红外线遥控器拍摄的照片就会保存到计算机上。

我设置了第二个脚本来中断等待进程并以编程方式拍照,如下所示:

代码语言:javascript
复制
#!/bin/sh
# shootnow.sh - stop the current gphoto2 process (if it exists),
# shoot a new image, then start a new wait-event process.

pkill -INT gphoto2     #send interrupt (i.e. ctrl+c) to gphoto2
sleep 0.1              #avoid the process ownership error
gphoto2 --capture-image-and-download  #take a picture now
gphoto2 --wait-event-and-download   #start a new wait-event process

但在中断之前,我想确保第一个等待事件进程当前没有下载图像(这会导致图像填满相机的ram,从而阻止进一步的操作)。因此,第二个脚本应该更像这样:

代码语言:javascript
复制
#!/bin/sh
# shootnow-with-check.sh - stop the current gphoto2 process (if it exists 
# and isn't currently downloading an image), shoot a new image, then start 
# a new wait-event process.

shootnow() {  # same as previously, but now in a function
    pkill -INT gphoto2
    sleep 0.1
    gphoto2 --capture-image-and-download
    gphoto2 --wait-event-and-download
}

if [ ***current output line of gphoto2 process doesnt start with "Downloading"*** ] then
    shootnow
else
    echo "Capture aborted - a picture was just taken and is being saved."
fi

有没有人能帮我写那个if语句?我可以读取正在运行的gphoto进程的当前输出行吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-30 14:25:29

我最终通过一个脚本实现了这一点:

代码语言:javascript
复制
#!/bin/bash
# gphoto2-expect.sh
# use expect to monitor gphoto2 during --capture-image-and-download with
# --interval=-1, adding in SIGUSR1 functionality except during a
# download event.

echo "Prepping system for camera"
killall PTPCamera
expect << 'EOS'
puts "Starting capture..."
if [catch "spawn gphoto2 --capture-image-and-download --interval=-1" gp_pid] {
  Log $ERROR "Unable to start gphoto2.\n$gp_pid\n"
  return 0
}

trap {exec kill -SIGUSR1 $gp_pid} SIGUSR1
set timeout -1
expect {
  -i $spawn_id
  "Downloading" {
    trap {send_user "\n Ignoring request as currently downloading"} SIGUSR1 ; exp_continue
  }
  "Saving file as" {
    sleep 0.1
    trap {exec kill -SIGUSR1 $gp_pid} SIGUSR1 ; exp_continue
  }
}

EOS

这可以由另一个脚本触发:

代码语言:javascript
复制
#!/bin/bash
# trigger.sh - trigger an immediate capture
var=$(pidof expect)
kill -SIGUSR1 "$var"
票数 1
EN

Stack Overflow用户

发布于 2016-08-20 20:01:56

gphoto2有一个选项--钩子脚本文件名。FILENAME必须是可执行脚本,并在某些gphoto2事件上调用。然后,该脚本具有一个环境变量ACTION,您可以将其用于您的目的。例如:您可以使用以下命令调用gphoto2

代码语言:javascript
复制
gphoto2 --capture-image-and-download --hook-script myhook.sh

myhook.sh看起来像是

代码语言:javascript
复制
#! /bin/bash
echo $ACTION

那么myhook.sh将被调用4次。它的输出是

代码语言:javascript
复制
init
start
download
stop

有关详细信息,请参阅man gphoto2。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38605309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档