如何在不使用重定向的情况下从文件读取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执行功能