如何将 stdin 传递给 python 脚本

如何将 stdin 传递给 python 脚本

我想将 shell 命令的输入传递到使用 shell 命令的别名中的 python 脚本。

测试.py:

import sys
print(sys.argv)

别名

alias foo='echo $(python test.py $1)'

因为$ python cd_alias_test.py hello会打印所有参数:['test.py', 'hello'] 我希望这个别名也能做同样的事情。然而它的标准输出是

['test.py'] hello

这意味着输入字符串被传递到标准输入,而不是脚本的参数。

我怎样才能达到预期的效果?

答案1

alias test='echo $(python test.py $1)'

$1未在别名中定义,别名不是 shell 函数;它们只是文本替换;所以你的test hello扩展为echo $(python test.py ) hello,它扩展为echo ['test.py'] hello

如果你想要一个 shell 函数,就写一个吧! (并且不要调用您的函数或别名test,该名称已经为 shell 中的逻辑评估事物保留)。

function foo() { echo $(python test.py $1) }
foo hello

但人们确实想知道:为什么不简单地制作test.py可执行文件(例如chmod 755 test.py)并#!/usr/bin/env python3在其中包含第一行?然后直接运行即可:

./test.py hello darkness my old friend

答案2

您的问题措辞混乱,但我似乎您只想执行一个别名,将参数传递给脚本。

我想这就是你想要的。

alias runtest='python test.py'

正如另外提到的,shell 函数比别名更可取——允许较少的琐碎参数处理。

所以在这个例子中:

function runtest() { python test.py "$1" ; }

相关内容