如何在不使用重定向的情况下从文件中读取Python脚本的命令行参数?

时间:2016-03-03 15:24:06

标签: python python-2.7 command-line

我有一个Python脚本,需要四个命令行参数。我不是每次运行脚本时在命令行中输入这些参数的值,而是希望将命令行参数的值存储在文件中,并让Python脚本从该文件中读取这些值作为命令行参数。例如,如果我想要的命令行参数是

0  1  2  3

然后,名为arguments_in_here.txt的文件的内容将为0 1 2 3。我想在命令行上进行一些调用,如

$ python myscript.py < arguments_in_here.txt

被解释为

$ python myscript.py 0 1 2 3

我已经知道仅仅使用<并不起作用,因为我试过了。

我可以通过以下方式使用xargs

$ cat arguments_in_here.txt | xargs python myscript.py

并且达到了预期的效果,但是在Pythonic精神中,我想知道是否有更直接和简洁的方法来实现我想要的,而不必使用重定向。

注意:我可以修改我的Python脚本,将文件名作为命令行参数,在那里存储我想要的命令行参数值,然后让我的脚本从文件中提取值在命令行上给它,但我想知道Python脚本是否有办法通过命令行从文件中读取命令行参数。

另请注意:如果它最终相关,我使用Python 2.7和tcsh

4 个答案:

答案 0 :(得分:2)

$ python myscript.py `cat arguments_in_here.txt`

这些是反叛,而不是常规的单引号。

答案 1 :(得分:1)

如果您使用python myscript.py < arguments_here.txt,则需要阅读stdin。另外,您可以使用cat来获取参数。

python myscript.py $(cat arguments_here.txt)

bash中$(cat filename)的简短格式为$(< filename)

答案 2 :(得分:0)

inputs = list(sys.stdin)  # Get all of stdin
inputs = inputs[0]  # Get only the first line
inputs = inputs.split()  #  python myscript.py < 0123_arguments.txt => [0, 1, 2, 3]

答案 3 :(得分:0)

我解决这个问题的方法是使用argparse library来解析一个带有文件名的命令。类似的东西:

$ python program filepath

然后,您可以创建一个从文件中读取属性的函数,并使用这些参数执行函数