2013-10-03 1 views
0

저는 컴퓨터에서 수업 중에 메모를하고 dropbox의 공용 폴더를 통해이 메모를 공유합니다. 내가 수업 시간에 메모를 할 때 PDF를 생성하기 전에 많은 불필요한 파일 (LaTeX에서 메모를 작성)을 만듭니다. 불필요한 파일로 보관 용 공간을 혼란스럽게하고 싶지 않고 PDF 만 보관 용으로 게시하는 것이 좋습니다.`time.sleep() '이 포함 된 스크립트를 죽입니다.

모든 것을 용이하게하기 위해 모든 클래스 (매주) 이후에 파이썬 스크립트 (아래)를 실행하는 cronjob을 설정합니다. 때로는 PDF를 보내기 전에 노트에있는 내용을 수정하는 동안 잠시 동안 머물러 있기 때문에 python 스크립트에 sleep 개의 묶음이있어 PDF가 생성되기를 기다리고 있습니다. 실수로 스크립트를 수동으로 실행했고 스크립트를 중지하는 데 도움이 필요합니다. 스크립트 (I 쉽게 그냥 더미 파일을 만들 수 있지만,이 "적절한"솔루션이 아니다)는 오늘 한 모든 파일을 찾을 수 없기 때문에

import os 
import subprocess 

from sys import exit as crash 
from datetime import date as dt 
from time import sleep 

def getToday(): 
answer = dt.strftime(dt.today(), "%b") + str(int(dt.strftime(dt.today(), "%d"))) 
return answer 

def zipNotes(date): 
today = getToday() 
while 1: 
    if today not in os.listdir('.'): 
    with open("FuzzyLog", 'a') as logfile: 
    logfile.write("Sleeping\n") 
    sleep(60*5) # sleep 5 minutes 
    continue 
    if "Notes.pdf" not in os.listdir(today): 
    with open("FuzzyLog", 'a') as logfile: 
    logfile.write("pdf not exported. Sleeping\n") 
    sleep(60*5) # sleep 5 minutes 
    continue 

    subprocess.call("""zip Notes.zip */Notes.pdf""", shell=True) 
    crash(0) 

zipNotes(getToday()) 

, 그것은 무한히 슬립 상태를 반복합니다. 루핑 조건은 매우 간단하기 때문에 PID를 죽이려면 "행동에서 잡으려고"하는 것이 매우 오랫동안 활성화되어 있어야합니다.

ps aux | grep python 어떤 PID가 죽이고 싶은 python 스크립트를 실행하고 있는지 또는 ps -ax | grep python 또는 ps -e | grep python을 표시하지 않는지 나와 있지 않습니다.

자고있는 동안 파이썬 스크립트를 추적 할 수있는 사람이 있습니까?
Mac OSX 10.7.5 (Lion)에서 문제가있는 경우

+0

스크립트를 쉽게 찾고 삭제할 수 있도록 업데이트하려면 대신 업데이트하여 깨끗하게 종료 할 수 없습니까? – abarnert

+0

@abarnert : 스크립트를 어떻게/어떻게 업데이트 할 수 있습니까? 그러나 현재는 이미 실행 중이며 죽일 필요가있는 스크립트가 붙어 있습니다. 이 스크립트를 찾고 죽이는 방법은 무엇입니까? – inspectorG4dget

+0

음,이 한 번만의 경우, 기다리는 더미 파일을 만드십시오. 그런 다음 미래에 불필요하게 만드는 방법을 살펴보십시오. – abarnert

답변

1

유닉스 데몬이이 문제를 처리하는 전통적인 방법은 "pid 파일"입니다.

프로그램이 시작될 때 (또는 런처가 프로그램을 시작할 때) 잘 알려진 위치에 파일을 생성합니다 (시스템 데몬의 경우 /var/run/<PROGRAM NAME>.pid, 사용자 별 데몬에는 일반 이에 해당하지 않음). PID를 해당 파일에 넣고 (PID 12345의 경우 ASCII 문자열 12345\n처럼) 종료 한 후 삭제합니다. 따라서 kill $(cat /var/run/myprogram.pid) 만 가능합니다.

그러나 여기에는 필요하지 않은 것처럼 보입니다. 킬러가 될 수 있도록 프로그램을 설계하는 대신 프로그램을 깔끔하게 종료하도록 쉽게 설계 할 수 있습니다.

또는 더 쉽게, 수면을 제거하십시오; cron이 매시간 스크립트를 실행하는 대신 PDF 파일이 생성 될 때까지 한 번에 1 분 동안 스크립트를 잠자기 상태로 두는 대신 LaunchServices가 PDF 생성시 스크립트를 실행하게하십시오.

+0

방금 ​​그것을 찾아보고 LauchServices가 (이론적으로) 어떻게 사용될 수 있는지 알아 낸다. 그러나 이전에 작업 한 적이 없기 때문에 더 간단한 해결책이 있습니까? (한 번만 파일을 만드는 중입니다.) 또는 올바른 방향으로 나를 가리킬 수 있습니까? 그래서 LaunchServices로 첫 번째 실험을 시작할 수 있습니까? – inspectorG4dget

+0

@ inspectorG4dget : [시작 데몬 및 에이전트 만들기] (https://developer.apple.com/library/Mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html)는 내가 아는 최고의 장소입니다. 파일이 특정 디렉토리에 추가 될 때마다 프로그램을 실행하는 것과 같이 다양한 유스 케이스에 대해 몇 가지 샘플 launchd plist 파일 (예 : cron 일정, 더 유연하고 훨씬 자세한 정보)이 있습니다. – abarnert

+0

@ inspectorG4dget : 또한 가이드에서 링크 된 참조 문서가 여전히 불완전한 경우 (필자는 10.4 또는 10.5 이후로 보지 못했습니다),'man launchd.plist'에는 모든 세부 사항이 있어야합니다. – abarnert