从文件中读取Python脚本命令行参数

7

test.txt

port = 1234

host = abc.com

test.py

port = sys.argv[1]

host = sys.argv[2]

我希望将test.txt作为输入提供给Python脚本:

python test.py test.txt

希望将文本文件中的端口和主机值作为命令行参数传递给Python脚本,然后将其传递给脚本中的端口和主机。

如果我这样做:

python test.py 1234 abc.com

参数将传递给sys.argv[1]和sys.argv[2]

我想使用从txt文件中读取来实现同样的功能。

谢谢。


2
你的问题是什么? - mgilson
1
我想要解决方案,怎么做呢?我修改了我的问题。 - bvr
3个回答

12

假设有一个名为 test.txt 的文件,其中包含一节标题:

[settings]
port = 1234
host = abc.com
你可以使用ConfigParser库获取主机和端口内容:
import sys
import ConfigParser

if __name__ == '__main__':
    config = ConfigParser.ConfigParser()
    config.read(sys.argv[1])
    print config['settings']['host']
    print config['settings']['port']
在Python 3中,它被称为configparser(小写)。

1
这个小改动就使它工作了:config.get("settings","appport")。谢谢。 - bvr
@lgor Hatarist,如果我运行上述脚本,会出现"IndexError: list index out of range"错误。无法找出问题所在。 - Kumar
1
@Kumar,这是因为当你运行它时,没有将参数传递给命令。请使用python script.py test.txt来运行它,而不是只有python script.py。你可以通过阅读Python文档中的sys.argv来解决这个问题。 - Igor Hatarist

1
在Linux中实现这个方法的方式是执行以下操作:

 awk '{print $3}' test.txt | xargs python test.py

你的 .txt 文件可以分成 3 列,其中第三列包含端口和主机的值。 awk '{print $3}' 提取这些列并将其作为输入参数传递给你的 Python 脚本。xargs 将它们作为输入参数提供给你的 Python 脚本。当然,如果你不想修改你的 .py 脚本来读取文件并提取这些输入值,也可以这样做。

1
我会将文本文件写成以下形式:

我反而会只写文本文件:

1234
abc.com

然后你可以这样做:

input_file = open(sys.argv[1])
port = int(input_file.readLine())
host = input_file.readLine()

这个也可以,但是在文件中替换端口值后,文件行中剩余的字符串会移动到下一行。不过还是谢谢。 - bvr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接