2017-01-27 2 views
0

launchd를 사용하여 백그라운드에서 내 OS X 응용 프로그램의 웹캠에서 이미지를 캡처하는 데 'imagesnap'명령을 사용하고 있습니다 (셸 스크립트 사용).imagesnap 명령을 사용한 이미지 캡처

파일 이름 : 나는 응용 프로그램 번들 경로에서 스크립트 및 PLIST 파일을 모두 보관

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>GroupName</key> 
    <string>user</string> 
    <key>UserName</key> 
    <string>root</string> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>KeepAlive</key> 
    <true/> 
    <key>Label</key> 
    <string>test</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>Path_to_ CaptureCameraPic </string> 
    </array> 
    <key>OnDemand</key> 
    <false/> 
    <key>Nice</key> 
    <integer>1</integer> 
    <key>StartInterval</key> 
    <integer>10</integer> 
    <key>StandardErrorPath</key> 
    <string>Path_to_Error_log.log</string> 
    <key>StandardOutPath</key> 
    <string>Path_to_Output_log.log</string> 
</dict> 
</plist> 

처럼 CaptureCameraPic

#!/bin/bash 

timestamp=$(date +"%Y%m%d%H%M%S") 

homeDirectory=$HOME/Documents 

# Create Project Directory 

if [ -d "$homeDirectory/MyApp" ]; then 
echo "MyApp Directory exists" 
cd $homeDirectory/MyApp 
homeDirectory=$homeDirectory/MyApp 

else 
echo "MyApp Directory does not exists" 

echo "Creating MyApp Directory" 

cd $homeDirectory/ 
mkdir MyApp 

echo "Created MyApp Directory successfully" 

cd $homeDirectory/MyApp 
homeDirectory=$homeDirectory/MyApp 

fi 

# Camera 
if [ -d "$homeDirectory/Camera" ]; then 
# Control will enter here if $DIRECTORY exists. 
echo "Camera Directory exists" 
cd $homeDirectory/Camera 
camera_filename="IMG_${timestamp}.jpg" 
echo "Take picture $camera_filename" 

imagesnap "$camera_filename" 

else 
echo "Directory does not exists" 
echo "Create directory" 
cd $homeDirectory 
mkdir Camera 
cd $homeDirectory/Camera 
camera_filename="IMG_${timestamp}.jpg" 
echo "Take picture $camera_filename" 

imagesnap "$camera_filename" 

fi 

그리고 내 PLIST (test.plist)가 보인다.

내 os x 응용 프로그램에서 로그인 버튼을 클릭하면 pl30을 /Library/LaunchDaemons/으로 복사했습니다.

스크립트 실행 (나는, 폴더 생성과 같은 출력 파일에 등을 로그 인쇄를 볼 수 있습니다)에 (launchctl로드 path_to_plist_in_LaunchDaemon_folder를 사용하여)를 시작합니다. 내가 뭔가 잘 작동

chmod +x CaptureCameraPic 
./CaptureCameraPic 

같은 터미널에서이 스크립트를 실행하고 때

그러나 'imagesnap'에 대한

, 그것은 오류

imagesnap: command not found 

을 던지는에 불과하다.

도움이 필요하십니까?

+0

'imagesnap' 명령은 무엇입니까? 나는 그것에 대해 들어 본 적이 없다 - 그것이 어디에서 왔는가? –

+0

@MarkSetchell : 확인해주세요. 방금 imagesnap ref로 질문을 업데이트했습니다. URL (http://www.iharder.net/current/macosx/imagesnap/). –

+0

터미널에서 'imagesnap'을 시도하십시오. 경로를 찾으면 찾을 수 있습니다. 그런 다음 스크립트에 전체 경로를 입력하십시오. – Roger

답변

0

@Rogier가 제시 하듯이 스크립트에 imagesnap의 전체 경로가 필요합니다.

which imagesnap 

또는

find /usr /opt -name imagesnap -type f -print 

는 그런 다음 스크립트에서 다음 사용합니다 : 당신이 찾을 수 또한

/path/to/imagesnap ... 

를, 스크립트에서 장난을 많이가 훨씬 간단하게 다음과 같이 할 수 있습니다.

#!/bin/bash 

# Set a variable just once so there is less maintenance 
photodir="$HOME/Documents/MyApp/Camera" 

# Make the directory if it doesn't exist, don't complain if it does 
mkdir -p "$photodir" 

cd "$photodir" 
if [ $? -ne 0 ]; then 
    echo "Failed to set working directory to $photodir" 
    exit 1 
fi 
... 
/path/to/imagesnap ... 

또한 타임 스탬프는 꽤 끔찍합니다. 나중에 구문 분석해야한다고 상상해보십시오! 여기에 구분 기호를 넣으십시오 :

date +"%Y-%m-%d_%H:%M:%S" 
2017-01-27_10:24:35