Оболочка PowerShell для прямого конвейерного ввода в скрипт Python
Я пытаюсь написать небольшой инструмент, который позволит мне выводить команды в буфер обмена. Я'прочиталмножественный ответы на стекеПереполнение, но они нене работает для меня, потому что они неТрубопровод, или потому что они нене использовать функцию, или они просто выкидывали ошибки (или, может быть, я только что испортил). Я поднял руки с PowerShell и решил пойти с Python.
Я создал скрипт Python под названием:copyToClipboard.py
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
просто передается скрипту Python как?stdin