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가 없으면 FTP는 전혀 작동하지 않습니다.
RunProgram은 컴퓨터의 명령줄 인터페이스 프로그램을 제어하는 JSL 함수입니다. FTP는 명령줄 인터페이스를 사용하지만 MS-Paint는 그렇지 않습니다. 명령줄 프로그램에는 명령 입력 스트림과 결과 출력 스트림이라는 두 가지 선택적 데이터 스트림이 있습니다. RunProgram을 사용하면 JMP가 외부 프로그램의 입력 스트림(stdin)에 명령을 쓰고 외부 프로그램의 출력 스트림(stdout)에서 출력을 읽을 수 있습니다.
RunProgram에는 몇 가지 예와 함께 도움말->스크립팅 색인에 설명이 있습니다.
외부 프로그램은 JMP에서 비동기적으로 실행됩니다. 위에서는 변수 엑스 은 핸들 외부 프로그램에; 덮어쓰지 마세요 엑스 작업이 완료될 때까지 RunProgram 반환 값을 다음과 같은 변수에 저장하십시오. 엑스 따라서 RunProgram이 즉시 손실되지 않습니다.
간단한 RunProgram 인터페이스를 사용하지 않는 한. 간단한 인터페이스는 동기식으로 실행됩니다. 즉, RunProgram은 외부 프로그램이 완료될 때까지 JMP로 돌아가지 않습니다. 반환 값은 외부 프로그램의 모든 출력입니다. 다음은 Windows 컴퓨터에서 작동하는 예입니다(인내심을 가지세요. 컴퓨터에 5번의 ping을 수행하는 데 5초가 걸립니다).
RP = RunProgram(
Executable("PING.EXE"),
Options( {"-n 5", "localhost"} ),ReadFunction("text"));
show(RP);
출력은 다음과 같습니다
32바이트 데이터로 <사용자 컴퓨터 주소> [::1]를 ping합니다.
::1에서 답장: 시간<1ms
::1에서 답장: 시간<1ms
::1에서 답장: 시간<1ms
::1에서 답장: 시간<1ms
::1에서 답장: 시간<1ms
::1에 대한 핑 통계:
패킷: 전송 = 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 창(검은색 도스박스 창)에 표시되지 않습니다.실행하는 프로그램이 cmd.exe가 아닌 이상.
감사해요!
이것은 좋아 보이지만 JMP를 통해 ftp나 ping 예제를 실행하는 데 약간의 문제가 있습니다.
runprogram을 통해 Internet Explorer와 같은 프로그램을 열면 제대로 작동하지만 ping, ftp 또는 "C:\Windows\System32\ftp.exe"를 가리키는 경우에도 아무런 작업이 발생하지 않는 것으로 표시됩니다.
jan95의 예보다 약간 더 확장 가능해 보이기 때문에 어떤 아이디어라도 정말 감사하겠습니다.
이것을 게시해 주셔서 정말 감사합니다.내가 알아야 할 것이 바로 그것이었습니다.RunProgram의 다양한 용도를 볼 수 있습니다.