Run program()에서 Python exe 실행일부 데이터를 분석할 수 있는 Python 실행 파일이 있습니다(그래서 나 또는 다른 사람들은 PC에 Python을 설치할 필요가 없습니다).
JMP에서 이것을 호출하고 실행하고 싶지만 JMP에서 이 Python exe에 변수를 공급하고 반환을 얻을 수 있기 때문에 최선의 방법을 잘 모르겠습니다.
통합 Python 명령을 사용하여 이 작업을 성공적으로 수행했지만 Python exe 파일을 사용하여 수행한 적은 없습니다. 입력해야 할 변수 중 하나는 데이터 테이블입니다. 현재 JMP가 테이블을 임시 위치에 .csv로 저장하도록 해야 합니다. 그러면 이 Python exe가 해당 .csv를 실행하고 편집할 수 있습니다. 그런 다음 JMP는 업데이트된 CSV를 열 수 있습니다(해당 스트림은 코딩되어 있지 않습니다). JSL에서는 더 나은 방법이 있어야 한다고 생각합니다)
이견있는 사람? 나는 Run Command()에 대한 최소한의 경험을 가지고 있으므로 어떤 시작 포인터라도 감사하겠습니다 
감사해요!
고급 통계 모델링자동화 및 스크립팅소비자 및 시장 조사데이터 접근대량 맞춤화Re: Run program()에서 Python exe를 실행합니다.실제 예제가 있습니다. FFmpeg를 사용하여 JMP에서 비디오 만들기 . Python 실행 파일이 아닌 FFmpeg 실행 파일을 사용하고 있지만 stdout에서 읽고 stdin에 쓰는 것을 모두 보여줍니다. 읽기 기능은 JMP 로그에 반영되지만 원하는 경우 텍스트를 버퍼링하고 다른 작업을 수행할 수 있습니다. 쓰기 기능은 인코딩을 위해 이미지를 한 번에 하나씩 FFmpeg로 스트리밍하는 것입니다.
FFmpeg를 사용하면 이미지가 FFmpeg로 전달될 때 JMP 로그에 실시간 에코를 표시하는 것이 유용합니다. 이를 통해 긴 프로세스 중에 문제가 있는지 확인할 수 있습니다. 프로세스가 짧고 끝에 단일(아마도 큰) 출력이 있는 경우 JMP가 stdout을 단일 문자열로 버퍼링할 수 있도록 하는 readfunction("text" 또는 "blob")을 사용하는 것이 더 편리하다는 것을 알게 될 것입니다. 돌아왔다. 또한 결과를 얻기 위해 RunProgram이 종료될 때까지 기다릴 필요가 없습니다(예제 끝 참조). 반면에 readfunction(function(...)) 을 사용하면 JMP가 출력이 생성되는 동안 출력 처리를 시작할 수 있습니다.
Python 프로그램이 CSV를 stdout으로 출력하는 경우 readfunction은 두 가지 이유로 blob을 사용해야 합니다(데이터가 7비트 ASCII여야 함에도 불구하고). blob은 2GB보다 클 수 있지만 JSL 문자열은 허용되지 않습니다. 얼룩은 dt = 열기( blobVariable, "csv") . CSV에 헤더를 추가하면 명명된 값 몇 개만 단일 행이 있는 테이블로 반환해야 하는 경우에도 유용합니다.
몇 가지 예제 Python 코드가 묻혀 있습니다. 베오울프, 뉴턴, 핸슨 씨 명령줄 매개변수를 읽는 것 - 검색 getopt --하지만 다른 곳에서 예제를 사용하는 것이 더 쉬울 수도 있습니다. 이 예에서 JMP는 plink(putty의)를 사용하여 원격 시스템에서 Python을 실행하고 네트워크의 NFS 디스크를 사용하여 데이터를 공유합니다.
Re: Run program()에서 Python exe를 실행합니다.네, 테스트해 볼 가치가 있다고 말하고 싶습니다. 매우 큰 Pandas 데이터 프레임에서 Postgres 테이블로 이동하기 위해 Unix에서 유사한 스트림 쓰기/읽기 기능을 실행했는데 속도가 매우 빠릅니다. JMP의 구현이 어떤지는 모르겠지만, 전체 테이블을 한 번에 stdin에 쓸 수 있을까요? 아마도 거대한 목록 목록으로 ...
참고로 저는 크기가 3GB 정도인 Pandas 데이터 프레임에서 Python 메서드를 테스트했는데 완료하는 데 10초도 채 걸리지 않았습니다. 방법은 다음과 같습니다.
def psql_insert_copy(table, conn, keys, data_iter):
"""
Parameters
----------
table : pandas.io.sql.SQLTable
conn : sqlalchemy.engine.Engine or sqlalchemy.engine.Connection
keys : list of str
Column names
data_iter : Iterable that iterates the values to be inserted
"""
# gets a DBAPI connection that can provide a cursor
dbapi_conn = conn.connection
with dbapi_conn.cursor() as cur:
s_buf = StringIO()
writer = csv.writer(s_buf)
writer.writerows(data_iter)
s_buf.seek(0)
columns = ', '.join('"{}"'.format(k) for k in keys)
if table.schema:
table_name = '{}.{}'.format(table.schema, table.name)
else:
table_name = table.name
sql = 'COPY {} ({}) FROM STDIN WITH CSV'.format(
table_name, columns)
cur.copy_expert(sql=sql, file=s_buf)
df.to_sql('example', schema='demo', con=DL.engine, method=psql_insert_copy)오래 전에 어떤 사이트에서 발견한 것입니다. (저는 그렇게 영리하지는 않습니다.) ). 데이터 반복자를 사용하고 포스트그레스 커서의 stdin에 한 행씩 기록하지만 여전히 속도가 매우 빠릅니다.
Re: Run program()에서 Python exe를 실행합니다.CSV 또는 Pandas의 장점은 Python 출력을 구문 분석할 필요가 없다는 것입니다. 출력이 csv인 경우 readprogram(blob)로 수신하고 csv 옵션으로 blob을 열어 테이블을 얻을 수 있습니다.Re: Run program()에서 Python exe를 실행합니다.@Michael_MXAK 흠, 그것도 흥미로운 아이디어네요. 작은 파일의 경우에는 잘 작동할 수 있습니다. 이러한 파일 중 일부는 크기가 커져 한 줄씩 방법이 지나치게 효율적이지 않을 수 있습니다. 그래도 생각하기에 좋은 음식입니다.
Re: Run program()에서 Python exe를 실행합니다.@Craige_Hales 좋아, 말이 되네요... 그게 제가 기대하고 있던 부분이지만 검색을 위해 정보를 문자열로 출력하는 것이 두 번째 csv를 처리하는 것보다 쉬울 것입니다.
Re: Run program()에서 Python exe를 실행합니다.나는 이 작업을 수행하지 않았으며 현재 내 시스템에서 쉽게 테스트할 수 없지만 JSL을 사용하여 실행 파일의 stdout에서 읽고 실행 파일의 stdin 스트림에 쓸 수 있는 것처럼 보입니다. https://community.jmp.com/kvoqx44227/attachments/kvoqx44227/discovery-2016-content/67/1/Run%20Program.pdf
Python은 파일과 유사한 작업으로 stdin에서 읽을 수 있습니다(그리고 stdout으로 출력). Python - stdin, stdout 및 stderr - AskPython
따라서 저는 데이터 테이블을 JMP 실행 파일의 stdin에 한 줄씩 ` << 쓰기`하고, 파일과 같은 방법을 사용하여 Python에서 JMP의 줄을 읽고, 해당 줄을 Pandas 데이터프레임에서 Python 작업을 실행한 다음 Pandas 데이터프레임을 Python에서 한 줄씩 stdout으로 출력하고 이를 JMP에 다시 공급합니다.
Re: Run program()에서 Python exe를 실행합니다.RunProgram을 통해 Python 프로그램에서 빌드된 실행 파일을 사용하거나 RunProgram에서 Python 스크립트로 Python 인터프리터를 호출하는 것도 비슷합니다. 어느 쪽도 통합 Python을 사용하는 것과 같은 통합 기능을 갖고 있지 않습니다. Python 프로그램으로 데이터를 보내고 Python 프로그램에서 데이터를 다시 가져오려면 CSV 파일과 같은 파일을 사용해야 합니다. 명령줄 매개변수를 .exe에 전달할 수도 있습니다. (또는 파이썬 인터프리터에게.)
귀하의 경우에는 $temp 디렉토리에 CSV를 작성하고 결과를 Python으로 인쇄하는 것이 좋습니다. 명령줄을 통해 csv 경로를 전달합니다. RunProgram(...readfunction("text")...)을 사용하여 인쇄된 출력 문자열을 검색합니다. 임시 dir 파일을 삭제하십시오.