2017-04-05 4 views
2

나는 중단하지 않는 한 24를 실행하도록되어 스크립트가 있습니다. 이 스크립트는 스크립트 A. I 스크립트 A가 스크립트 B를 호출하고 스크립트를 B가 실행되는 동안 종료를 갖고 싶어합니다. 이것이 가능한가? 이 내가어떻게 파이썬 프로그램을 종료하려면?

#script_A.py 
while(1) 
    do some stuff 
    do even more stuff 
    if true: 
     os.system("python script_B.py") 
     sys.exit(0) 


#script_B.py 
time.sleep(some_time) 
do something 
os.system("python script_A.py") 
sys.exit(0) 

일을 것이라고 생각 것입니다 그러나 실제로 B가 (나는 일이 원하는하지 않은) 실행이 완료 될 때까지 종료하지 않는 것처럼 보인다. 다른 방법이 있습니까?

+0

백그라운드에서 B 스크립트를 시작하려면'os.system ("python script_B.py &")'를 사용하십시오. – Alfe

+0

os.system은 동기식입니다. – Marichyasana

답변

0

은 당신이 묘사하는 것은 함수 호출과 같은 많은 소리. 이것은 일반적으로 bash는 명령에 앰퍼샌드를 추가하여 이루어집니다 배경의 프로세스를 생성 포함한다 :

yes 'This is a background process' & 

그리고 착탈 말했다 분기에 의해 수행되는 간단한 C 프로그램에서, 현재 쉘에서 처리 그 과정은 두 번. 나는 이것에 대한 모듈이 있음을, 파이썬에서이 작업을 수행하는 방법을 모른다, 그러나 내기 것입니다. 지금 독립적이기 때문에 호출 파이썬 프로세스가 종료, 그것은, 스폰 아이를 종료하지 않습니다

이 방법.

0

당신이 다른 스레드로 시스템 호출을 분리 할 것 같다.

script_A.py

import subprocess 
import sys 

while(1) 
    do some stuff 
    do even more stuff 
    if true: 
     pid = subprocess.Popen([sys.executable, "python script_B.py"]) # call subprocess 
     sys.exit(0) 

는 어쨌든 그것은 전혀 좋은 연습을하지 않는 것 같습니다. 왜 스크립트 A는 프로세스 스택을 청취하고 스크립트 B를 실행하면 멈 춥니 다. 이것은 당신이 그것을 할 수있는 또 다른 예입니다. 이 당신을 위해 부족한 경우

def doScriptB(): 
    # do some stuff 
    # do some more stuff 

def doScriptA(): 
    while True: 
    # do some stuff 
    if Your Condition: 
     doScriptB() 
     return 

while True: 
    doScriptA() 

, 당신은 당신 파이썬 과정에서 프로세스를 분리 할 수 ​​있습니다

import subprocess 
import sys 
import psutil 

while(1) 
    #This sections queries the current processes running 
    for proc in psutil.process_iter(): 
     pinfo = proc.as_dict(attrs=['pid', 'name']) 
     if pinfo[ 'name' ] == "script_B.py": 
      sys.exit(0) 

    do some stuff 
    do even more stuff 
    if true: 
     pid = subprocess.Popen([sys.executable, "python script_B.py"]) # call subprocess 
     sys.exit(0)