我想从命令行调用Jython脚本,p.e。
$ /Applications/Fiji.app/Contents/MacOS/ImageJ-macosx --headless little_jython_script.py
我知道Python(以及Jython)通过
获取参数的能力import sys
params = sys.argv[1:]
然后用类似的东西调用脚本
$ /Applications/Fiji.app/Contents/MacOS/ImageJ-macosx --headless jython_script_with_params.py param1 param2 param3
。
然而,根据ImageJ网页http://imagej.net/Script_parameters,也可以在Jython中编码参数的使用,类似于该网站上的Greeting.py示例
# @String name
# A Jython script with parameters.
# It is the duty of the scripting framework to harvest
# the 'name' parameter from the user, and then display
# the 'greeting' output parameter, based on its type.
print "Hello, " + name + "!"
问题是:如何在命令行调用name
中指定参数$/Applications/Fiji.app/Contents/MacOS/ImageJ-macosx --headless Helloworld.py
?
答案 0 :(得分:0)
参数的可用方式取决于调用命令,其中差异是Jython方式中的附加标志--ij2
和--run
。 sys.argv
或# @String
等工作,但不能同时工作
<强> 1。 sys.argv的经典Python方法
$/Applications/Fiji.app/Contents/MacOS/ImageJ-macosx --headless JythonScript.py param1 param2
以JythonScript.py
的经典python方式收集sys.argv
的参数,即
# @String param1 ### Does NOT work
import sys
program_name = sys.argv[0]
paramvalue1 = sys.argv[1]
paramvalue2 = sys.argv[2]
<强> 2。使用#@ String等的Jython特定方式
$/Applications/Fiji.app/Contents/MacOS/ImageJ-macosx --ij2 --headless --run JythonScript_2.py 'param1=value, param2=value'
以Jython方式获取参数
# @String param1
# @Long param2
### See http://imagej.net/Script_parameters#Parameter_types
### for a complete list of parameter types
import sys
check = sys.argv
#here check is a length 1 list containing en empty string: check ==['']
请注意两个以逗号分隔的param=value
对的引号。单引号和双引号都有效。当只有1个参数时,可以省略它们。对于字符串参数,请确保将它们包含在其他类型的引号中,或者在字符串纯粹是字母数字时省略引号
$/Applications/Fiji.app/Contents/MacOS/ImageJ-macosx --ij2 --headless --run JythonScript_3.py 'stringparam1="string with ',' and space ", stringparam2=abc123'