PowerShell-Wrapper zum Weiterleiten von Eingaben an Python-Skripte
Ich versuche, ein kleines Tool zu schreiben, mit dem ich die Ausgabe von Befehlen in die Zwischenablage leiten kann. Ich habe durchgelesenmehrere Antworten auf Stack Overflow, aber sie funktionierten nicht für mich, weil sie keine Piping-Funktion enthielten oder weil sie keine Funktion verwendeten, oder sie warfen nur Fehler (oder ich habe es einfach vermasselt). Ich warf meine Hände mit PowerShell und entschied mich für Python.
Ich habe ein Python-Skript namens erstelltcopyToClipboard.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()
(Ich habe das nicht vollständig getestetargv[1]
Teil, so könnte das wackelig sein. Ich interessiere mich hauptsächlich für das Lesen vonstdin
ist also der wichtige Teilsys.stdin
.)
Das funktioniert super! Wenn ich mich in dem Verzeichnis befinde, das das Skript enthält, kann ich Folgendes ausführen:
ls | python copyToClipboard.py
Und der Inhalt vonls
magisch erscheinen in meiner Zwischenablage. Genau das will ich.
Die Herausforderung besteht darin, dies in eine PowerShell-Funktion zu packen, die eine weitergeleitete Eingabe entgegennimmt und diese einfach an das Python-Skript weiterleitet. Mein Ziel ist es zu könnenls | Out-Clipboard
, also habe ich so etwas wie erstellt:
function Out-ClipBoard() {
Param(
[Parameter(ValueFromPipeline=$true)]
[string] $text
)
pushd
cd \My\Profile\PythonScripts
$text | python copyToClipboard.py
popd
}
Das geht aber nicht. Nur eine Zeile$text
macht sich auf den Weg zum Python-Skript.
Wie kann ich den Wrapper für mein PowerShell-Skript so strukturieren, dass alles, was es empfängt, alsstdin
wird einfach an das Python-Skript als übergebenstdin
?