我想知道你将如何传递,然后使用以下语法检索脚本中的数字列表:
python3 program.py < 1 2 3 4
我知道我可以使用以下语法传递参数:
python3 program.py 1 2 3 4
然后使用sys.argv
检索参数:
print(sys.argv) # a list of arguments
我已经看过了,但由于某种原因,我无法做到。
请注意,我想知道它是否可能,我不是想要从标准输入中读取与上面第一个示例不同的方法。
答案 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。它可能不你想要的东西。