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

问题描述:

我有一个Python脚本,需要四个命令行参数。每次运行脚本时,我都不想在命令行中输入这些参数的值,而是希望将命令行参数的值存储在文件中,并让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 

我已经知道,只是用<不工作,因为我尝试了一下。

我可以通过以下方式

$ cat arguments_in_here.txt | xargs python myscript.py 

使用xargs并达到预期的结果,而是那种在Python的精神,我想知道是否有一个更直接,更简洁的方式来达到我想要的,而不必使用重定向。

注:我可以修改我的Python脚本取一个文件名作为命令行参数,存放在那里我需要的命令行参数的值,然后有我的脚本给它在文件上拉值命令行,但我想知道是否有任何方法让Python脚本通过命令行从文件中读取命令行参数。

还要注意:如果最终被相关的,我使用Python 2.7和tcsh

$ python myscript.py `cat arguments_in_here.txt` 

这些都是反引号,而不是普通的单引号。

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] 

如果您使用python myscript.py < arguments_here.txt比您需要从stdin读取。您也可以使用cat来获取参数。

python myscript.py $(cat arguments_here.txt) 

$(cat filename)的缩写形式是在bash $(< filename)

我对这个问题的解决方法是使用argparse library来解析一个命令和文件名。喜欢的东西:

$ python program filepath 

然后你就可以创建一个读取文件属性的功能,并与PARAMS执行功能