【问题标题】:how to get string from powershell's 2 line output如何从powershell的2行输出中获取字符串
【发布时间】:2018-06-27 04:41:51
【问题描述】:

我需要从 powershell 输出中获取一个字符串。我需要获取包名
prompt-toolkit 并在下面的管道中使用它

> pip list --outdated
Package        Version Latest Type
-------------- ------- ------ -----
prompt-toolkit 1.0.15  2.0.3  wheel

pip 列表 --outdated | Where-Object { $exclude -notcontains $_ } | ForEach { pip install -U $_.split(" ")[0] }

更新。
修改后的工作脚本

    $(
    $exclude = 'virtualenv', 'prompt-toolkit'
    pip list --outdated --format=freeze  | ForEach{ $_.split("=")[0]} | Where-Object { $exclude -notcontains $_ } | ForEach { pip install -U $_ }                                    
    ) *>&1 >> Python_Modules_Updates_Log.txt

【问题讨论】:

  • 考虑以json格式传递pip列表pip list --outdated --format=json | ConvertFrom-Json
  • @LotPings,谢谢。我查看了 --format 选项,并选择了 freeze 选项。这样我就不需要使用 select-object -skip 2

标签: python powershell


【解决方案1】:

试试吧

pip list --outdated | select-object -skip 2 | Where-Object { $exclude -notcontains $_ } | ForEach { pip install -U $_.split(" ")[0] }

【讨论】:

  • Where 无法正常工作,因为$_ 仍包含所有列。我会在计算属性pip list --outdated | select-object -skip 2 -property @{n='Package';e={$_.split(' ')[0]}} | Where-Object Package -notin $exclude 中进行拆分
【解决方案2】:

要获取列表的Packagenames,您可以使用Select-Object-ExpandProperty 功能并将其通过管道传递给安装命令:

pip list --outdated | Select-Object -ExpandProperty Package | Where-Object { $exclude -notcontains $_ } | ForEach { pip install -U $_}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 2019-06-19
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多