(사용자 정의) JMP에서 실행되는 Python GUI안녕하세요 여러분,
사용자 입력을 얻기 위해 GUI를 사용하는 사용자 지정 파이썬 패키지가 있습니다. 이제 JMP18 내에서 이 패키지를 실행하고 싶습니다.
PY_SCRIPT = "
from mydummy.util import jmp
from mydummy.request import this_data
df = this_data().GUI()
jmp_source = jmp.df2jmp(df, 'MY DT')
";
EXECUTE = Python Execute({}, {jmp_source}, PY_SCRIPT);
If(EXECUTE == 0,
DT = Eval(Parse(jmp_source));
,
DT = New Table();
);일반적으로 이 스크립트는 작동합니다. GUI를 만들고, 파이썬에서 데이터를 처리하고, JMP-Table-Script로 변환하고, 거기서부터는 평소처럼 데이터 분석/그래픽에 JSL을 사용할 수 있습니다.
하지만 Python Execute(Run Programm과 마찬가지로)는 항상 JMP에서 모든 것을 동결시킵니다. 그래서 GUI가 열려 있고 파이썬 코드가 실행 중일 때 JMP에서 더 이상 아무것도 할 수 없습니다. '~JMP\JMPPRO\18\jmp_python.exe' 인스턴스의 새 인스턴스를 시작할 방법이 있습니까?
subprocess.Popen을 사용하는 파이썬 스크립트도 시도했습니다. 반환을 기다리면 같은 문제가 발생합니다.
제 GUI에는 메인 스레드가 필요하므로 스레딩도 불가능합니다. 어떻게든 새로운 ~jmp_python.exe 인스턴스를 생성해야 하거나 jsl에서 처리할 수 있습니다.
제안이 있나요? 가능할까요?
고맙습니다
자동화 및 스크립팅Re: (사용자 정의) JMP에서 실행되는 Python GUIJMP Python Integration은 메인 스레드에서 실행되므로 UI가 JMP를 인수하고 차단합니다. 명령줄에서 시작된 jmp_python.exe 사본을 지정하고 실행하려면 하위 프로세스를 시도할 수 있습니다. 그래서 jmp.PYTHON_EXE 및 jmp.PYTHONW_EXE 변수가 존재합니다. (PYTHONW_EXE는 19+일 수 있다고 생각합니다). 하지만 하위 프로세스에서 제이엠피 패키지를 활용할 수 없습니다.
Python GUI를 실행할 때 발견할 수 있는 다른 문제는 메인루프를 차지하고 마지막 대화 상자가 닫히면 JMP가 충돌할 수 있다는 것입니다. Python GUI 메인루프를 종료하면 JMP가 의존하는 메뉴 항목, 창 핸들 등이 사라질 수 있기 때문입니다. GUI 애플리케이션에 내장된 다른 UI 툴킷을 Python을 통해 로드하려고 하기 때문에 위태롭습니다.
현재로서는 이를 수행하는 가장 좋은 방법은 Python에서 jmp.run_jsl을 사용하여 호출할 수 있는 JSL 생성 대화 상자와 창을 사용하여 GUI를 작성하는 것이라고 생각합니다. pyDigest.py 샘플 스크립트에서 이를 수행할 수 있으며, 여기서 JSL 디렉터리 선택기를 사용하여 디렉터리 경로를 가져옵니다.
jmp.run_jsl('''
localPath = Pick Directory("Choose Directory to checksum");
// Pick Directory on windows returns a leading / use Convert File Path()
If( Host is("Windows"),
localpath = Convert File Path( localPath, windows )
);
JMP의 대화 상자와 창 기능을 사용하는 것은 호환됩니다. 외부 UI 문제를 조사하고 있습니다.
Re: (사용자 정의) JMP에서 실행되는 Python GUIRunProgram은 ReadFunction 없이 반환하기 전에 모든 출력을 수집하기 때문에 JMP를 정지시킵니다. JMP가 유휴 상태일 때 또는 wait(0) 동안 호출되는 ReadFunction과 함께 사용할 수도 있으며, 유휴 시간이 있는 한 JMP가 다른 작업을 수행할 수 있습니다. FFmpeg로 JMP에서 비디오 만들기에는 외부 프로그램에서 읽고 읽은 내용을 JMP 로그에 쓰는 간단한 ReadFunction의 예가 있습니다.