JMP로 외부 프로그램 실행안녕,
저는 새로운 사용자이며 프로그램 실행에 대해 명확하지 않은 몇 가지 사항을 알고 싶습니다.
선적 서류 비치. JSL을 사용하여 자체 GUI를 시작하는 외부 프로그램을 실행하고 있습니다.
1. 이 GUI를 JMP에 포함하거나 강제로 JMP GUI에 포함시키는 방법이 있습니까?
2. 처음에 Windows에서 명령줄을 시작하고 항목을 로드한 다음 파일 대화 상자를 요청합니다.
나를 위해 표준 파일입니다. 이것을 자동으로 제공하고 파일 대화 상자 열기를 억제할 수 있습니까?
3. matlab에 작성된 대로 matlab 플롯을 생성했습니다. JMP gui에 matlab 플롯을 강제로 포함할 수 있습니까?
4. 가장 중요: 외부 프로그램을 호출할 수는 있지만 Run Program 실행 후 스크립트 부분
프로그램이 끝나지 않았더라도. 외부 프로그램 종료 후 파일을 복사해야 하기 때문에 복사된 파일은
불완전하다.
나는 이것을하려고 노력하고 있습니다 (모든 수정은 환영합니다).
some_function = Function({x},
//This function I wish to execute after the some_exe is finished
//or I have closed all of its gui components manually.
);
Show("this executes before run program"); //ok, as expected.
run_program = Run Program(
Executable(some_exe), //Works but execution through .bat doesn't.
Read Function(some_function),
);
Show("This also executes before external program finishes. Why?");
Re: JMP로 외부 프로그램 실행하기자세한 답변 감사합니다. 문제는 내가 텍스트 출력을 보고 있지 않다는 것입니다. UI 창을 포함할 수 있는 방법이 있으면 좋겠다고 생각했습니다.
외부 프로그램에 의해 생성되고 능동적으로 업데이트되는 matlab 플롯과 같은. 외부 프로그램은 계속 표시되는 마지막 플롯과 함께 중지되며 수동으로 닫아야 합니다. 그러나 ui 창을 캡처하고 jmp에 넣는 것은 어떤 응용 프로그램에도 너무 많은 것을 요구하는 것 같습니다.
감사
Re: JMP로 외부 프로그램 실행하기(4)에 답하면 왜 JSL은 RunProgram 호출 후 너무 빨리 실행됩니까?
RunProgram은 여러 가지 방법으로 시작할 수 있습니다. ReadFunction을 제공했으므로 RunProgram은 즉시 반환하고 테스트할 수 있는 메서드가 있는 RunProgram 개체를 반환합니다.
While( run_program << canread | run_program << canwrite | !(run_program << isreadeof),
// show(run_program<<CANREAD></CANREAD>
위의 예는 연결이 종료될 때 연결을 닫는 외부 프로그램에 따라 다릅니다. 각 검사 후 잠시 기다렸다가 프로그램이 여전히 주변에 있는지, JMP에서 읽기, JMP 쓰기를 대기 중인지 또는 JMP가 나중에 읽을 수 있는 연결을 닫지 않았는지 다시 확인합니다. 주석이 달린 show()가 그것을 알아내는 데 도움이 될 것입니다.
더 간단한 방법은 ReadFunction을 생략하는 것입니다. 그런 다음 RunProgram은 외부 프로그램이 인쇄한 텍스트를 반환합니다. ~ 후에 외부 프로그램이 종료됩니다. 그런 다음 반환된 텍스트와 JSL을 사용하여 만든 외부 프로그램(창 열기, 그래프 만들기 등)을 처리할 수 있습니다.
복잡한 길 : JMP가 JMP 소유 창에 업데이트를 표시할 것으로 예상하는 경우 동안 외부 프로그램이 실행되면 텍스트에 반응하는 JSL로 ReadFunction 텍스트를 처리해야 합니다. 텍스트가 한 번에 몇 글자씩 도착할 수 있기 때문에 이것은 복잡합니다. 텍스트 비트를 JSL 문자열로 수집하고 텍스트 명령이 완료되고 일부를 버리지 않는 시점을 결정하기 위한 전략이 필요합니다. 다음 텍스트 명령. JMP가 표시할 데이터는 텍스트 또는 파일에 있을 수 있지만 수신된 텍스트 명령은 데이터가 사용 가능한지 확인하는 방법입니다. (외부 프로그램에 의해 절반만 작성된 파일을 사용하기 시작할 수 있으므로 파일이 사용 가능해질 때까지 지켜보지 않는 것이 좋습니다.)
잘 작동하도록 ReadFunction 작성: 다음과 같이 시도하십시오.
while(this<<CANREAD></CANREAD>
그만큼 프로세스 기능 사용 당신의 버퍼에 완전한 텍스트 명령이 있는지 확인하고, 명령을 처리하고, 명령을 제거하고 다음 텍스트 명령의 일부가 될 버퍼에 남아 있는 모든 것을 반환하는 전략입니다. process(buffer)는 명령이 완료되지 않은 경우 변경되지 않은 전체 버퍼를 반환해야 하며 완료된 버퍼의 모든 텍스트 명령을 처리해야 합니다.
그리고 위의 모든 복잡한 부분에서 JMP가 텍스트 명령으로 해석할 수 있는 인쇄된 출력을 생성하기 위해 외부 프로그램을 작성하는 방법을 완전히 무시했습니다. 그리고 전략은 다음과 같습니다: 완전한 명령을 구분하기 위한 줄 바꿈 또는 쉼표 등.