是否可以使用<! - ? - >将数字列表作为参数传递

时间:2015-03-20 20:27:22

标签: python python-3.x arguments stdin

我想知道你将如何传递,然后使用以下语法检索脚本中的数字列表:

python3 program.py < 1 2 3 4

我知道我可以使用以下语法传递参数:

python3 program.py 1 2 3 4

然后使用sys.argv检索参数:

print(sys.argv)  # a list of arguments

我已经看过了,但由于某种原因,我无法做到。

请注意,我想知道它是否可能,我不是想要从标准输入中读取与上面第一个示例不同的方法。

2 个答案:

答案 0 :(得分:2)

您误解了所建议命令的语法。

这是一个简单的python程序,它打印出标准输入和命令行参数的内容:

# program.py

import sys

print("stdin:", sys.stdin.read())
print("args:", sys.argv)

...以及使用您提出的语法调用时会发生什么:

$ python3 program.py < 1 2 3 4
stdin: This is the content of file '1'.

args: ['program.py', '2', '3', '4']

换句话说,您的语法会重定向文件的内容&#39; 1&#39;标准输入,并提供参数&#39; 2&#39;,&#39; 3&#39;和&#39; 4&#39;该计划。

所以,没有,你想做的事情是不可能的 - 不是因为Python,而是因为shell的运作方式。

答案 1 :(得分:1)

是的,您可以使用重定向传递数字列表。有here-string syntax in bash

$ python3 -c 'print(sum(map(int, input().split())))' <<<'1 2 3'
6

虽然将它作为参数列表传递更为直接:

$ python -c 'import sys; print(sum(map(int, sys.argv[1:])))' 1 2 3
6

< 1尝试从名为1的文件重定向stdin。它可能你想要的东西。