将值从python脚本获取到powershell脚本中

2024-07-07 07:55:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,它创建了一个票证。 我需要从powershell脚本中调用python脚本,然后 获取票号(12位长)

方法1:

我试着用出口(票号)来完成这件事。只要票号不是很大,效果就很好

  • 从python退出(12345)转换为$LASTEXITCODE=12345#好
  • python的exit(123456789123)转换为$LASTEXITCODE=-1#不确定这里出了什么问题
    dummy.py
    --------
    print("hello")
    exit(123456789123)
       
    sample.ps1
    ----------
    python dummy.py
    Write-Host($LASTEXITCODE)

方法2:

env变量的使用

dummy.py
--------
import os
os.environ["TICKETNUMBER"] = "123456789123"
exit(0)

sample.ps1
----------
Get-ChildItem -Path Env:TEMP # good - able to get value
Get-ChildItem -Path Env:TICKETNUMBER # - error - ItemNotFoundException

因此,我想知道每种方法都出了什么问题。 有没有更好的方法来完成这项工作?请提出建议


Tags: samplepath方法pyenv脚本getos
1条回答
网友
1楼 · 发布于 2024-07-07 07:55:36

您不应该使用退出代码来输出值,这根本不是它们要做的。您可以在此处阅读有关退出代码的更多信息:https://shapeshed.com/unix-exit-codes/#what-is-an-exit-code-in-the-unix-or-linux-shell

环境变量仅在将值传递给子对象时用于传递值。如果生成一个新进程,则该进程将继承当前会话范围内的环境变量。但是,不能从子级(python运行时)更改父级(会话)的环境变量。因此,在Powershell中,“TICKETNUMBER”环境变量超出范围

首先让我说,有很多不同的方法来解决这个问题。您需要最少工作量的解决方案是输出到stdout,这允许您输出值供其他进程使用。您可以使用python中的print实现这一点。您已经这样做了,但可能由于使用退出代码而遇到问题

在Powershell中,您可以通过管道接受此输入。有很多方法可以实现这一点,但是在您的示例中$input变量可以工作

dummy.py
    
print("123123123")

sample.ps1
    
Get-ChildItem -Path $input

然后可以运行py dummy.py | ./sample.ps1,它将返回目录列表“/123123”

相关问题 更多 >