注意:@AnsgarWiechers 的答案是推荐的答案。
IE
function RunOtherScript($_oneParameter, $twoParameter) {
$cmd = "python -u otherScript.py --oneParameter $_oneParameter"
if ($twoParameter) { $cmd += " --twoParameter $twoParameter" }
ExecuteSSHCommand $cmd
}
以下内容纯粹出于学术兴趣而发布。
这是一个解决方案;但它只适用于数字/只是为了兴趣而不是一个好的或推荐的解决方案:
(我在下面以不同的方式对待oneParameter
和处理twoParameter
;如果oneParameter
不存在,python 的调用仍然指定它(只是没有传递任何值);如果twoParameter
该参数未在 python 调用中显示,但缺少该参数)。
cls
function RunOtherScript($_oneParameter, $twoParameter)
{
("python -u otherScript.py --oneParameter {0} {1:--twoParameter 0}" -f $_oneParameter, $twoParameter)
}
RunOtherScript
RunOtherScript "a"
RunOtherScript "a" 10
RunOtherScript "a" "10" # this doesn't work the way you'd want it to
输出
python -u otherScript.py --oneParameter
python -u otherScript.py --oneParameter a
python -u otherScript.py --oneParameter a --twoParameter 10
python -u otherScript.py --oneParameter a 10
另一种选择:
这不是一个黑客,但需要更多代码;所以可能只有当你有很多参数时才值得:
clear-host
function RunOtherScript{
[CmdletBinding()]
Param(
[parameter(Mandatory = $true)]
[string]$_oneParameter
,
[parameter(ValueFromRemainingArguments = $true)]
[String] $args
)
process {
[string]$cmd = "python -u otherScript.py"
$cmd = $cmd + " --oneParameter $_oneParameter"
$args | ?{$_ -ne ""} | %{ $cmd = $cmd + " --twoParameter $_" }
write-output $cmd #to show what we'd be executing
#ExecuteSSHCommand $cmd
}
}
RunOtherScript "one" "two" "three"
RunOtherScript "one" "two"
RunOtherScript "one"
输出:
python -u otherScript.py --oneParameter one --twoParameter two three
python -u otherScript.py --oneParameter one --twoParameter two
python -u otherScript.py --oneParameter one
或对于许多参数:
clear-host
function RunOtherScript{
[CmdletBinding()]
Param(
[parameter(Mandatory = $true)]
[string]$_oneParameter
,
[parameter(ValueFromRemainingArguments = $true)]
[string[]]$arguments
)
begin {
[string[]]$optionalParams = 'twoParameter','threeParameter','fourParameter'
}
process {
[string]$cmd = "python -u otherScript.py"
$cmd = $cmd + " --oneParameter $_oneParameter"
[int]$i = -1
$arguments | ?{($_) -and (++$i -lt $optionalParams.Count)} | %{ $cmd = $cmd + " --" + $optionalParams[$i] + " " + $arguments[$i] }
write-output $cmd
#ExecuteSSHCommand $cmd
}
}
RunOtherScript "one" "two" "three" "four" "five"
RunOtherScript "one" "two" "three" "four"
RunOtherScript "one" "two" "three"
RunOtherScript "one" "two"
RunOtherScript "one"
输出:
python -u otherScript.py --oneParameter one --twoParameter two --threeParameter three --fourParameter four
python -u otherScript.py --oneParameter one --twoParameter two --threeParameter three --fourParameter four
python -u otherScript.py --oneParameter one --twoParameter two --threeParameter three
python -u otherScript.py --oneParameter one --twoParameter two
python -u otherScript.py --oneParameter one