0

GUI의 컨테이너에서 스크립트를 실행하는 방법을 찾고 있습니다. GUI의 컨테이너에서 파이썬 스크립트를 실행하십시오.

GUI를

스크립트를 생성하고 난 내 GUI에 영향없이이 스크립트를 실행합니다. 내 문제는 내 스크립트의 모든 가져 오기 및 클래스가 실행 후 메모리에 남아 GUI에서 오류가 발생한다는 것입니다. 스크립트를 실행하고 결과를 얻고 scrpt 실행의 모든 ​​결과를 삭제할 수 있습니까?

멀티 프로세싱, 스레딩을 시도했지만 작동하지 않습니다. 어떻게해야합니까? 고마워요!

안녕 마티아스 쿠티는, 난 그냥 지금 멀티 프로세싱의 경우가 있습니다. 스크립트가 멈 추면 삭제할 수있는 일종의 컨테이너에서 실행하는 방법을 찾고 싶습니다.

@pyqtSlot() 
def run_func(): 
    run=""" 
    import os 
    import sys 
    from setup import * 
    print('toto') 
    print('titi') 
    """ 
    from multiprocessing import Pool 
    pool = Pool(processes=4)   
    asyncResult = pool.apply_async(exec(run),{},{}),range(1)  
+1

스레드를 사용하여 시도한 _how_을 보여주는 몇 가지 코드를 제공 할 수 있습니까? –

+0

@ user3393374 질문을 편집하고 해당 샘플 코드를 포함해야합니다. 그것은 코멘트에서 읽을 수 없습니다. – dano

답변

0

좋아요, 다른 접근 방법을 알려 드리겠습니다. 실행할 코드가 포함 된 임시 파일을 생성 한 다음 subprocess 모듈을 사용하여 "python you_script.py"명령을 사용하여 excecute 할 수 있습니다.

다음 예제에서는 모든 파일을 출력하도록 스크립트를 실행합니다. 작업 디렉토리의 디렉토리.

import os   # Common os operations. 
import subprocess # For creating child processes. 
import tempfile  # For generating temporary files. 

def make_temp_script(script): 
    """ 
    Creates a temp file with the format *.py containing the script code. 
    Returns the full path to the temp file. 
    """ 
    # Get the directory used for temporaries in your platform. 
    temp_dir = os.environ['TEMP'] 
    # Create the script. 
    _ , path = tempfile.mkstemp(suffix=".py", dir=temp_dir) 
    fd = open(path, "w") 
    fd.write(script) 
    fd.close() 
    return path 


def execute_external_script(path): 
    """ 
    Execute an external script. 
    Returns a 2-tuple with the output and the error. 
    """ 
    p = subprocess.Popen(["python", path], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    out, err = p.communicate() 
    return (out, err) 

if __name__ == '__main__': 

    script = \ 
    """ 
    import os 
    import sys 

    print(os.listdir()) 
    """ 

    path = make_temp_script(script) 
    out, err = execute_external_script(path) 

    print(out) 
    print(err) 

당신은 당신의 코드에서 예를 들어 뭔가를 시도 할 수 있습니다 :

@pyqtSlot() 
def run_func(): 
    run=""" 
    import os 
    import sys 
    from setup import * 
    print('toto') 
    print('titi') 
    """ 

    path = make_temp_script(run) 
    result, error = execute_external_script(path) 
+0

답장을 보내 주셔서 감사 드리며, 알려 드리겠습니다. – user3393374

0

당신은 함수에 스크립트를 만드는 시도 할 수 :

script = """ 
def func(): 
""" + yourScript 
yourGlobals = ... 
exec script in yourGlobals 
yourGlobals["func"]() 

위의 코드는 그냥 일반적인 생각이다 : 들여 쓰기를 yourScript으로 수정해야합니다. 스크립트에 의해 생성 된 모든 전역은 사실 func의 로컬이되므로 func이 반환 된 후에 제거됩니다. 수입품은 아마 제거되지 않을 것이다, 포장 테이블에있는 입장 인 것을 계속할 것이다. 수입이 제거되지 않기 때문에 위의 충분하지 않은 경우

은, 아마 당신은이 주변에 다른 방법이있을 수 있습니다, 오류를 설명 할 수 있으며 그 원인 오류가 남아있는 것을 가져옵니다.

스크립트를 실행하는 데 시간이 오래 걸릴 수 있습니다 경우

는 위의 기술은 너무 별도의 스레드에서 작업 할 수 있습니다.

관련 문제