2017-09-12 2 views
0

"인덱스 파일"을 사용하는 작은 응용 프로그램을 작성하여 몇 번의 단추 누르기만으로 탐색기에서 폴더를 열 수 있습니다. 어쨌든 응용 프로그램이 종료 될 때마다 "백그라운드 프로세스"에서 해당 색인 파일을 업데이트하고 싶습니다. 색인 파일을 업데이트한다는 것은 네트워크를 통해 스캔하는 것을 의미하며 일부 원격 사용자의 경우 몇 분이 소요될 수 있습니다. 그래서 사용자가 프로세스를 중단하지 않도록 스캔 프로세스 중에 콘솔을 숨기고 싶습니다.프로세스가 실행 중일 때 콘솔 닫기

#these are just dummy lines 
path = get_user_input() 
subprocess.Popen(r'explorer "%s"' % path) 
#Here I start my update process 
multiprocessing.Process(target=update_index).start() 
#end of script, now I want that process to continue until finished while main console closes. I only seem to get one or the other. 

나는 또한 사용하여 시도 :

DETACHED_PROCESS = 0x00000008 
CREATE_NO_WINDOW = 0x08000000 
subprocess.Popen(command, shell=True, stdin=None, stdout=None, 
       stderr=None, 
       creationflags=DETACHED_PROCESS|CREATE_NO_WINDOW) 

을 별도의 콘솔 창 여전히 아래로 폐쇄의 사용자를 방지에서 어떤 방법을 얻을 수 있었다

내가 유사한 몇 가지 시도 방법.

또한이 스크립트를 나중에 py2exe와 같은 형태로 배포하여 나중에 python이 없어도 액세스 할 수 있도록하고 싶습니다. pythonw.exe를 사용하면 문제가되지 않을 것입니다. 또는?

+0

대개 스크립트에 콘솔이 있어야합니까? 그렇지 않으면 pythonw.exe로 실행되는 .pyw 파일을 사용하십시오. – eryksun

+0

BTW,'CREATE_NO_WINDOW'는'DETACHED_PROCESS'를 사용하면 무시됩니다. 'DETACHED_PROCESS'는 자식 콘솔 프로세스를 생성하지 않는 경우에만 콘솔없이 콘솔 앱을 실행하는 것에 대해 의미가 있습니다. 이 플래그를 사용하면 표준 핸들을'NUL' 장치로 재지 정해야합니다. 'CREATE_NO_WINDOW'는 창없는 콘솔을 상속하기 때문에 자식 프로세스에 대해 작동합니다. 비슷하게,'STARTUPINFO'를 사용하여 콘솔 창을 숨길 수 있습니다. – eryksun

+0

예, 스크립트에는 보통 콘솔이 있어야합니다. 첫 번째 부분에서 사용자가 대답하기 위해 두 가지 질문을하도록했습니다. 적어도 그것이 현재 어떻게 진행되고 있는지, 콘솔보다 다른 종류의 창에서 그러한 질문을 할 수있는 가능성이 있음을 나는 사무실에있을 때 시도 할 것입니다. 하위 프로세스 메서드에 대한 플래그에 관해서는 나는 그들이 어떻게 작동하는지에 대한 많은 단서를 가지고 있지 않습니다. 나는 그저 놈들을 발견하고 다른 조합을 시도했습니다. 세부 사항을 좀 더 알려 주셔서 감사합니다! – Saftblandaren

답변

0

정말 대답은 아니지만 시스템 아키텍처를 다시 디자인 할 수 있습니다. 소켓을 통해 실제 응용 프로그램과 통신하는 서버 프로세스로 인덱스 업데이터를 작성하십시오. 그런 다음 인덱스 업데이터 서버 프로세스를 계속 실행하고 (다른 시스템에서도) 인덱스 업데이트 프로세스가 모든 시간 소모적 인 작업을 수행하게하십시오.

+0

당신이 말한 것처럼 내가 찾고있는 것이 정확하지 않습니다. 물론 그것은 해결책 일 수 있지만 나는이 스크립트의 큰 거래를하고 싶지 않았습니다. 이러한 서비스를 설정한다는 것은 훨씬 더 많은 작업을 의미하며 그러한 서비스를 호스팅 할 수있는 회사의 다른 사람들을 포함합니다. 네트워크에 저장된 색인 파일을 사용하는 경우와 비교하여 사용하면 업데이트됩니다. – Saftblandaren

0

특정 간격으로 발생하는 백그라운드 작업을 수행하려는 경우 cron을 사용하십시오. 콘솔에서 로그 아웃 한 경우에도 백그라운드에서 명령을 실행하고 계속 실행하려면 nohup을 사용하십시오.

+0

이 질문은 Windows 용 태그이며 OP 코드는 Windows 용입니다 (예 : "explorer"실행 및'creationflags' 사용). – eryksun

관련 문제