gpt4 book ai didi

python - PowerShell 包装器将管道输入定向到 Python 脚本

转载 作者:行者123 更新时间:2023-12-01 05:50:26 27 4
gpt4 key购买 nike

我正在尝试编写一个小工具,让我可以将命令输出通过管道传输到剪贴板。我已通读multiple answers在 Stack Overflow 上,但它们对我不起作用,因为它们不包含管道,或者因为它们没有使用函数,或者它们只是抛出错误(或者也许我只是搞砸了)。我放弃了 PowerShell,决定使用 Python。

我创建了一个名为 copyToClipboard.py 的 Python 脚本:

import sys
from Tkinter import Tk

if sys.stdin.isatty() and len(sys.argv) == 1:
#We're checking for input on stdin and first argument
sys.exit()

tk = Tk()
tk.withdraw()
tk.clipboard_clear()

if not sys.stdin.isatty():
#We have data in stdin
while 1:
try:
line = sys.stdin.readline()
except KeyboardInterrupt:
break

if not line:
break

tk.clipboard_append(line)
elif len(sys.argv) > 1:
for line in sys.argv[1]:
tk.clipboard_append(line)


tk.destroy()

(我还没有完全测试 argv[1] 部分,所以这可能不稳定。我主要对阅读 stdin 感兴趣,所以重要的部分是 sys.stdin 。)

这很好用!当我位于包含脚本的目录中时,我可以执行如下操作:

ls | python copyToClipboard.py

以及 ls 的内容神奇地出现在我的剪贴板上。这正是我想要的。

挑战在于将其包装在 PowerShell 函数中,该函数将采用管道输入并将输入简单地传递给 Python 脚本。我的目标是能够做到ls | Out-Clipboard ,所以我创建了类似的东西:

function Out-ClipBoard() {
Param(
[Parameter(ValueFromPipeline=$true)]
[string] $text
)
pushd
cd \My\Profile\PythonScripts
$text | python copyToClipboard.py
popd
}

但这行不通。只有一行$text进入 Python 脚本。

如何构建 PowerShell 脚本的包装器,使其接收到的内容为 stdin只需将 stdin 传递给 Python 脚本即可?

最佳答案

首先,在PowerShell中,多行文本是一个数组,因此需要一个[String[]]参数。要解决您的问题,请尝试使用进程 block :

function Out-ClipBoard() {
Param(
[Parameter(ValueFromPipeline=$true)]
[String[]] $Text
)
Begin
{
#Runs once to initialize function
pushd
cd \My\Profile\PythonScripts
$output = @()
}
Process
{
#Saves input from pipeline.
#Runs multiple times if pipelined or 1 time if sent with parameter
$output += $Text
}
End
{
#Turns array into single string and pipes. Only runs once
$output -join "`r`n" | python copyToClipboard.py
popd
}
}

我自己这里没有Python,所以无法测试。当需要通过管道传递多个项目(一个数组)时,需要 PowerShell 的进程 block 来处理它。有关进程 block 和高级功能的更多信息,请参阅 at TechNet .

关于python - PowerShell 包装器将管道输入定向到 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14529252/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com