Python收到的确切方式
echo input | python script
和
python script input
不同?我知道一个是通过stdin来的,另一个是作为一个参数传递的,但后端会发生什么不同?
答案 0 :(得分:5)
我不确定这里让你感到困惑的是什么。 stdin
和命令行参数被视为two different things。
命令行参数自动在argv
参数中传递,与任何其他c
程序一样。用C
(即 python.c
)编写的Python的主要功能是接收它们:
int
main(int argc, char **argv) // **argv <-- Your command line args
{
wchar_t **argv_copy;
/* We need a second copy, as Python might modify the first one. */
wchar_t **argv_copy2;
/* ..rest of main omitted.. */
虽然管道的内容存储在stdin
中,您可以通过sys.stdin
进入。{/ p>
使用示例test.py
脚本:
import sys
print("Argv params:\n ", sys.argv)
if not sys.stdin.isatty():
print("Command Line args: \n", sys.stdin.readlines())
在没有管道的情况下运行它会产生:
(Python3)jim@jim: python test.py "hello world"
Argv params:
['test.py', 'hello world']
使用echo "Stdin up in here" | python test.py "hello world"
时,我们会得到:
(Python3)jim@jim: echo "Stdin up in here" | python test.py "hello world"
Argv params:
['test.py', 'hello world']
Stdin:
['Stdin up in here\n']
并非严格相关,但有趣的是:
此外,我记得您可以使用Python的 -
参数执行stdin
中存储的内容:
(Python3)jimm@jim: echo "print('<stdin> input')" | python -
<stdin> input
KEWL!