Opakowanie PowerShell do bezpośredniego przesyłania danych wejściowych do skryptu Pythona
Próbuję napisać małe narzędzie, które pozwoli mi wypuścić polecenie wyjścia do schowka. Przeczytałemwielokrotność odpowiedzi na Stack Overflow, ale nie działały one dla mnie, ponieważ nie zawierały pipingu, lub dlatego, że nie korzystały z funkcji lub po prostu rzucały błędy (a może po prostu się pomyliłam). Podniosłem ręce z PowerShell i zdecydowałem się na Pythona.
Stworzyłem skrypt Pythona o nazwiecopyToClipboard.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()
(Nie przetestowałem w pełniargv[1]
część, więc może to być chwiejne. Jestem zainteresowany głównie czytaniemstdin
, więc ważną częścią jestsys.stdin
.)
To działa świetnie! Kiedy znajduję się w katalogu, który zawiera skrypt, mogę wykonać coś takiego:
ls | python copyToClipboard.py
I zawartośćls
magicznie pojawi się w moim schowku. To jest dokładnie to, czego chcę.
Wyzwaniem jest zawinięcie tego w funkcję PowerShell, która pobierze potokowe dane wejściowe i po prostu przekaże dane wejściowe do skryptu Pythona. Moim celem jest mócls | Out-Clipboard
, więc stworzyłem coś takiego:
function Out-ClipBoard() {
Param(
[Parameter(ValueFromPipeline=$true)]
[string] $text
)
pushd
cd \My\Profile\PythonScripts
$text | python copyToClipboard.py
popd
}
Ale to nie działa. Tylko jedna linia$text
trafia do skryptu Pythona.
Jak skonstruować opakowanie dla mojego skryptu PowerShell tak, aby cokolwiek otrzymywało jakostdin
po prostu zostaje przekazany do skryptu Pythona jakostdin
?