コマンド出力をクリップボードにパイプできる小さなツールを作成しようとしています。Stack Overflowで複数の 回答を読みましたが、配管が含まれていないか、関数を使用していないか、エラーをスローしただけで(または、混乱しただけで)、うまくいきませんでした。 )。私は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スクリプトにたどり着くのは1行だけです。
stdin
PowerShellスクリプトのラッパーを構造化して、受け取ったものがすべてPythonスクリプトに渡されるようにするにはどうすればよいstdin
ですか?