将命令行参数从powershell脚本传递到python脚本

时间:2016-06-24 05:56:03

标签: python powershell command-line-arguments

我从Powershell脚本调用python代码以循环一些参数。从Powershell调用python脚本是直截了当的,并且没有任何障碍:

PS C:\Windows\system32> C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python.exe C:\Users\Administrator\AppData\Local\Programs\youtube-upload-master\bin\youtube-upload C:\Users\Administrator\Documents\timelapse\videos\timelapse_10.0.0.51-2016-06-21.mp4 --client-secrets=C:\Users\Administrator\Documents\timelapse\credentials\.yt-ul-ioa-secr.json --credentials-file=C:\Users\Administrator\Documents\timelapse\credentials\.yt-ul-ioa-cred.json --title="Timelapse 21.06.2016" --playlist "Timelapses June 2016"

然后在脚本中我将参数插入变量插入参数字符串,最后用Invoke-Command调用整个事件:

# yt-ul.ps1
param(
    #[switch]$all_cams = $false,
    [int]$days = -1,
    [string]$cam = "ioa"
)

$cam_ip_hash = @{
    "ioa" = "10.0.0.51"; 
    "pam" = "10.0.0.52";
    "biz" = "10.0.0.56";
    "prz" = "10.160.58.25";
    "igu" = "10.160.38.35"}


$cam_ip = $cam_ip_hash[$cam]
$date = (Get-Date).AddDays($days).ToString("yyyy-MM-dd")

$py = "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python.exe"
$yt_ul = "C:\Users\Administrator\AppData\Local\Programs\youtube-upload-master\bin\youtube-upload"

$title_date = (Get-Date).AddDays($days).ToString("dd.MM.yyyy")

$us = New-Object System.Globalization.CultureInfo("en-US")
$playlist_date = (Get-Date).AddDays($days).ToString("Y", $us)

$vid = "C:\Users\Administrator\Documents\timelapse\videos\timelapse_$cam_ip-$date.mp4"
$secr = "--client-secrets=C:\Users\Administrator\Documents\timelapse\credentials\.yt-ul-igu-secr.json"
$cred = "--credentials-file=C:\Users\Administrator\Documents\timelapse\credentials\.yt-ul-igu-cred.json"
$title = "--title=`"Timelapse $title_date`""
$playlist_date = "--playlist `"Timelapses $playlist_date`""
$arg_list = "$yt_ul $vid $secr $cred $title $playlist_date"

Invoke-Command "$py $arg_list"

但实际调用该脚本失败如下:

PS C:\Users\Administrator\Documents\scripts> .\yt-ul.ps1
Invoke-Command : Parameter set cannot be resolved using the specified named parameters.
At C:\Users\Administrator\Documents\scripts\yt-ul.ps1:34 char:1
+ Invoke-Command "$py $arg_list"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Command], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.InvokeCommandCommand

我认为我用单引号和双引号做了一些非常愚蠢的事情,但我不确定。

1 个答案:

答案 0 :(得分:0)

感谢JosefZ的作品:

& $py $yt_ul $vid $secr $cred --title "Timelapse $title_date" --playlist "Timelapses $playlist_date"