使用PowerShell v1.0中的动态参数调用python

时间:2013-07-02 09:16:14

标签: python variables powershell command invoke

我正在构建一个PowerShell脚本,它从zip中提取csv,转换OS-> lat / lon,将内容强健地填充到数据库中,然后通过电子邮件发送带有统计信息的分发列表来完成相当多的工作整个过程。

现在大部分内容已经完成,但为了使整个事情更具可移植性,我提供了输入/工作/输出文件夹的路径作为来自批处理文件的powershell调用的参数。

这一切都非常有效,直到我需要调用python脚本来执行lat / lon工作,因为传入变量参数路径似乎不适用于任何排列/组合。

以下是.PS1脚本中python路径的简化版本,如果直接调用,则可以从命令提示符和.PS1文件中工作(其中-i -o是输入/输出路径参数< / em>的)。

c:\python27\python.exe D:\PythonPPC\subs.py -i D:\PPC\subs_export.csv -o D:\PPC\subs_export_lat_lon.csv

在我的脚本中,我想用以下变量替换两个路径参数-i / -o:

c:\python27\python.exe D:\PythonPPC\subs.py -i $inputPathsubs_export.csv -o $outputPathsubs_export_lat_lon.csv

有没有人知道如何调用此命令,因为我已经尝试过在堆栈和其他一些地方描述的&amp; $ exe方法,但这只会导致如下所示的错误:

CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

我建议使用Join-Path cmdlet构建路径。它将为您节省跟踪前导/尾随路径分隔符的麻烦,并将/规范化为\

$workingFolder = 'C:\some/where\'
$extractFolder = '\extract\folder'
$infileName    = '/subs_export.csv'
$outfileName   = '\subs_export_lat_lon.csv'

$infile  = Join-Path (Join-Path $workingFolder $extractFolder) $infileName
$outfile = Join-Path (Join-Path $workingFolder $extractFolder) $outfileName

结果:

PS C:\> $infile
C:\some\where\extract\folder\subs_export.csv
PS C:\> $outfile
C:\some\where\extract\folder\subs_export_lat_lon.csv

如果您仍希望简单地将字符串连接到路径,则可以通过将变量名称放在大括号之间来将变量与尾随字符串分开。在您的示例中:

python.exe D:\PythonPPC\subs.py -i "${inputPath}subs_export.csv" ...

python.exe D:\PythonPPC\subs.py -i "${rootFolder}${subFolder}subs_export.csv" ...

答案 1 :(得分:0)

在从另一个方向攻击问题并且同事指出我自己的愚蠢之后,似乎以下是对上述复杂问题的相当直接的解决方案。

$inputFilePath = $pathToWorkingFolder + $pathToExtractFolder + 'subs_export.csv'
$outputFilePath = $pathToWorkingFolder + $pathToExtractFolder +'subs_export_lat_lon.csv'    
c:\python27\python.exe D:\PythonPPC\subs.py -i $inputFilePath -o $outputFilePath

我想......我只是需要一些同行评议......