다음은 JMP 11의 RunProgram 기능을 통해 FTP를 작동하는 JSL입니다. RunProgram에 대한 자세한 내용은 아래를 참조하십시오.
// this example is specific to Windows because of FTP and RunProgram issues
// you'll need to supply a proper site to open and replace
// anonymous... with proper credentials.
// for the example, build a "junk" directory in the temp folder
temp = Convert File Path( "$TEMP", windows ) || "junk"; // no trail back slash
Create Directory( temp ); // typically: "C:\Users\yourname\AppData\Local\Temp\junk"
// use JMP 11 RunProgram to run ftp; supply a ReadFunction to send all
// results to the JMP log
x = RunProgram(
Executable( "ftp" ),
Options( "-v -n" ),
ReadFunction( Function( {this}, Write( this << read ) ) )
);
x << Write( "open ftp.example.com\!n" ); // site to open
x << Write( "user anonymous YOU@yourcompany.com\!n" ); // credentials
x << Write( "dir\!n" ); // look in the log for the file listing
x << Write( "lcd " || temp || "\!n" ); // local change directory...no trail back slash!
x << Write( "get README\!n" ); // fetch file 1
x << Write( "get index.html\!n" ); // and file 2
x << Write( "disconnect\!n" ); // or just bye if nothing else to do
x << Write( "bye\!n" ); // run program terminates when ftp terminates
// when ftp signals end-of-file for reading, RunProgram must
// really be finished. Wait for it...
While( !(x << isReadEof), Wait( .01 ) );
// display the two files in the temp directory
Write( Load Text File( temp || "\!\README" ) );
Write( "\!n\!n\!n" );
Write( Load Text File( temp || "\!\index.html" ) );
Delete Directory( temp ); // clean up
덕분에 자라95 ~에 이 게시물 FTP 옵션의 경우. FTP는 그들 없이는 전혀 작동하지 않았습니다.
RunProgram은 컴퓨터의 명령줄 인터페이스 프로그램을 제어하는 JSL 함수입니다. FTP는 명령줄 인터페이스를 사용하지만 MS-Paint는 사용하지 않습니다. 명령줄 프로그램에는 명령의 입력 스트림과 결과의 출력 스트림이라는 두 가지 선택적 데이터 스트림이 있습니다. RunProgram을 사용하면 JMP가 외부 프로그램의 입력 스트림(stdin)에 명령을 쓰고 외부 프로그램의 출력 스트림(stdout)에서 출력을 읽을 수 있습니다.
RunProgram은 몇 가지 예와 함께 도움말->스크립팅 색인에 설명이 있습니다.
외부 프로그램은 JMP에서 비동기식으로 실행됩니다. 위에서 변수 엑스 이다 핸들 외부 프로그램에; 덮어쓰지 마세요 엑스 완료될 때까지 RunProgram 반환 값을 다음과 같은 변수에 저장해야 합니다. 엑스 따라서 RunProgram은 즉시 손실되지 않습니다.
간단한 RunProgram 인터페이스를 사용하지 않는 한. 간단한 인터페이스는 동기식으로 실행됩니다. 즉, RunProgram은 외부 프로그램이 완료될 때까지 JMP로 반환되지 않습니다. 반환 값은 외부 프로그램의 모든 출력입니다. 다음은 Windows 컴퓨터에서 작동하는 예입니다(기다립니다. 컴퓨터에 5번의 핑을 수행하는 데 5초가 걸립니다).
RP = RunProgram(
Executable("PING.EXE"),
Options( {"-n 5", "localhost"} ),ReadFunction("text"));
show(RP);
출력은 다음과 같습니다.
32바이트 데이터로 <컴퓨터 주소> [::1] 핑:
::1에서 답장: 시간<1ms
::1에서 답장: 시간<1ms
::1에서 답장: 시간<1ms
::1에서 답장: 시간<1ms
::1에서 답장: 시간<1ms
::1에 대한 Ping 통계:
패킷: 전송 = 5, 수신 = 5, 손실 = 0(0% 손실),
대략적인 왕복 시간(밀리초):
최소 = 0ms, 최대 = 0ms, 평균 = 0ms
ReadFunction("text") 이 동작을 활성화합니다. 많은 감독 없이 끝까지 실행되는 프로그램에 유용합니다.
FTP 코드 ~할 것 같다 많은 감독을 원합니다. 다음 명령이 무엇인지 결정하기 전에 명령의 출력을 검사할 수 있습니다. 필요한 경우 RunProgram으로 수행할 수 있지만 복잡하고 설명하기 어려우며 다음 사람이 유지 관리하기가 어렵습니다. ReadFunction과 매우 유사한 WriteFunction이 있습니다. 읽기와 쓰기 모두를 위한 JSL 함수를 작성하고 조정해야 합니다. RunProgram은 stdout에서 사용할 수 있는 데이터가 있거나 stdin이 더 많은 데이터를 받아들일 수 있을 때 호출합니다. 스크립팅 인덱스의 예제 중 하나에는 WriteFunction을 통해 한 번에 하나씩 CMD.EXE로 보내는 명령 목록이 있습니다. 하지만 실제로는 ReadFunction의 stdout 데이터를 연구하는 것이 아니라 그냥 인쇄하는 것입니다.
2017년 9월 30일 수정: 서식 복구
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />(이메일로 해결...) 결과를 보려면 JSL 로그 창이 열려 있어야 한다는 점을 지적하지 못했습니다(문제가 발생하면 디버그).로그 창은 기본적으로 닫혀 있습니다.보기->로그(windows) 또는 창->로그(mac).
특히 출력은 CMD 창(검은 dos-box 창)에 표시되지 않습니다.실행하는 프로그램이 cmd.exe가 아닌 한.
감사해요!
이것은 멋져 보이지만 JMP를 통해 실행하기 위해 ftp 또는 ping 예제를 가져오는 데 약간의 문제가 있습니다.
runprogram을 통해 인터넷 익스플로러와 같은 프로그램을 여는 것은 잘 작동하지만 ping, ftp 또는 심지어 "C:\Windows\System32\ftp.exe"를 가리키는 경우에도 아무런 동작이 일어나지 않는 것으로 표시됩니다.
이것은 jan95의 예보다 약간 더 확장 가능해 보이기 때문에 어떤 아이디어라도 정말 감사하겠습니다.
게시해주셔서 감사합니다.내가 알아야 할 것이 바로 그것이었습니다.RunProgram의 많은 용도를 볼 수 있습니다.