使用参数从终端运行Jython脚本

时间:2016-12-16 16:59:59

标签: python jython imagej

我想从命令行调用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

1 个答案:

答案 0 :(得分:0)

参数的可用方式取决于调用命令,其中差异是Jython方式中的附加标志--ij2--runsys.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'