大家好!
我们遇到了一些高科技客户关于 Python 和许可合规性(批处理)问题的问题,我想在我们的内部社区中分享这些问题。我希望这个帖子能变成一个讨论,不仅包含我的问题的答案,还包含大家遇到的其他用例(Python 和批处理)。
注意:我不是 Python 专家!
1) 使用 Python 调用 JMP(而不是使用 JMP 调用 Python)。我们的客户希望这样做。我在网上看到了一些(非 JMP)材料,证明了可行性。
A) Python 调用 JMP 是否存在可接受的用例?在我看来,这听起来像是批处理情况。
如果这是批量情况,有人能提供一些我们可以提供给客户的现成技术响应吗?我听过@Jeff_Perkinson说“JMP 不是为这种用例设计或测试的,所以我们无法保证以这种方式使用 JMP 完成的任何工作”(我在这里解释得不太清楚,对不起 Jeff!)。
2) JMP 是否支持 Pandas Python 库?我看到了@IkjuShin在 2018 年发布的一篇关于此问题的帖子,想知道这里是否有其他材料,或者其他 SE 是否遇到过这个问题。
我在 JMP 脚本指南中找到了此示例,这使我相信这是 JMP/Python 集成器的一个可行用例。
3) 客户希望创建一个包含 While 循环的 JSL 脚本,以便连续执行。该脚本将在专门用于运行 JMP 的计算机上运行。用户将开始执行脚本(并且理论上结束它)。我没有关于该用例的任何其他详细信息,但考虑到对话的背景,可以想象这个脚本将 ping 数据库以获取新数据并更新报告。
A) 这是否符合我们的桌面许可协议?
这是否已经过测试以及/或者以可靠方式实施这一目标面临哪些技术障碍?
长文...感谢您的收看和贡献!
谢谢马丁。这里有很多好的内容,有些我不太明白!我得再读几遍。
嗨杰夫,
一个。
我认为这个 PDF 将是一个很好的参考,虽然它是 2009 年的(https://www.lexjansen.com/nesug/nesug09/ap/AP09.pdf),我也附加了它。
它引用了一些脚本语言及其调用:
COMPARE & CONTRAST
COM Syntax across scripting tools is more alike than different across: Tcl, Perl , Python, R, & VBScript. For example: Start up JMP, Open a Document, Launch a Platform, Run some JSL.
TCL:
package require tcom
set JMP [::tcom::ref createobject "JMP.Application"];
set JMPdoc [$JMP OpenDocument {C:\Big Class.JMP}]
set oneway [$JMPdoc CreateOneway]
$JMP RunCommand "Distribution(
Perl:
use OLE;
use Win32::OLE;
$jmp = Win32::OLE->new('JMP.Application')
my $doc = $jmp->OpenDocument("C:\\Big class.jmp");
$doc -> CreateOneway
$jmp->RunCommand("Distribution(…
Python:
from win32com.client import Dispatch
jmp = Dispatch("JMP.Application")
doc = jmp.OpenDocument("C:/Big class.jmp")
doc.CreateOneway
jmp.RunCommand("Distribution(…
R:
library(rcom)
jmp <- comCreateObject("JMP.Application")
bigclass <- comInvoke(jmp, "OpenDocument", "C:\\Big Class.jmp")
oneway <- comInvoke(bigclass, "CreateOneway")
comInvoke(jmp, "RunCommand",…
VBscript:
set jmp = Wscript.CreateObject("JMP.Application")
set jmpdoc = jmp.OpenDocument("C:/Big class.jmp")
Set Oneway = JMPDoc.CreateOneway
jmp.RunCommand("Distribution(…
B.
这似乎也相关(来自 python 页面):https: //stackoverflow.com/questions/17931476/how-to-call-a-jsl-script-from-python-script
在 Mac 上它提到:
import os
os.system('open /Applications/JMP\ Pro\ 13.app/Contents/MacOS/JMP /path/filename.jsl')
路径/可执行文件和路径/名称之间有一个空格。
在您的 JSL 中,确保第一行只有 //! 这将使脚本在打开时自动运行。此外,使用 quit(); 作为最后一行,这样打开的 JMP 实例就会关闭。
还要注意:确保 jmp.exe 在您的系统环境中可用,这样如果您在命令行中键入“jmp.exe”,它将启动 jmp。然后准备好您的 *.jsl。使用 python 进程运行此命令“jmp.exe *.jsl”,这将打开 jmp 并运行 *.jsl 脚本,然后您可以将从 jmp 生成的任何内容导入回 python。
还有另一个 Python 线程讨论从 python 调用其他应用程序:https: //stackoverflow.com/questions/247724/how-can-i-launch-an-instance-of-an-application-using-python
此社区主题也可能引起您的兴趣: https://community.jmp.com/t5/Discussions/jsl-Script-call-from-Python/mp/206295#M41799
C.
最后,自动化参考(http://www.jmp.com/support/downloads/pdf/jmp1001/automation_reference.pdf)展示了如何使用 OLE 自动化。或者http://www.jmp.com/support/downloads/pdf/vb_automation_reference.pdf
我还没有尝试过,也没有在我的客户群中见过任何人。到目前为止,我看到的用例是在 JMP 中构建模型,将最终模型转换为 Python 脚本,并在基于 Python 的 Web 界面中使用它。用例是在汽车环境中为新项目进行资源规划。该模型的效果比项目负责人的建议要好得多。但是,如果其他人可以依赖构建模型,这也可能会减少需要使用 JMP Pro 的用户数量。但如果您的客户有分析组,这始终是可能的 