我试图写一个小工具,可以让我管命令输出到剪贴板。 我已经通过阅读多个 答案对堆栈溢出,但他们并没有为我工作,因为他们没有包括管道,或者是因为他们没有使用的功能,或者他们只是把错误(或者也许我只是搞砸)。 我把我的手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
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
?