2015-02-09 3 views
1

test.txtпитона аргументы командной строки сценария из файла

port = 1234 

host = abc.com 

test.py

port = sys.argv[1] 

host = sys.argv[2] 

Я хочу предоставить test.txt в качестве входных данных для питона сценария:

python test.py test.txt 

так что значения порта и хоста в текстовом файле должны передаваться в качестве аргументов командной строки в скрипт python, которые inturn передаются в порт и хост в скрипте.

если я делаю:

питон test.py 1234 abc.com

аргументы передаются sys.argv [1] и sys.argv [2]

то же самое я хочу для достижения использования чтения из txt-файла.

Спасибо.

+2

И ваша проблема ...? – mgilson

+0

Мне нужно решение, как это сделать. модифицировано мой вопрос. – bvr

ответ

4

Учитывая 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 (в нижнем регистре) ,

+0

Это работало с небольшими изменениями: config.get («настройки», «appport»). Благодарю. – bvr

+0

@lgor Hatarist Я получаю сообщение об ошибке «IndexError: list index out of range», если я запускаю вышеуказанный скрипт. Не удалось выяснить проблему. – Kumar

+1

@Kumar Это потому, что когда вы его запускаете, вы не передаете аргумент команде. Запустите его, используя 'python script.py test.txt', а не только' python script.py'. Вы можете понять это, прочитав о [sys.argv] (https://docs.python.org/2/library/sys.html#sys.argv) в документации python). –

1

способ сделать это в Linux это сделать:

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

Ваш файл .txt могут быть разделены на 3 колонки, из которых третья содержит значения для порта и хоста. awk '{print $3}' извлекает эту колонку и xargs передает их в качестве входных параметров в ваш скрипт python.

Конечно, это только в том случае, если вы не хотите изменять свой .py скрипт для чтения файла и извлечения этих входных значений.

0

Я бы вместо того, чтобы просто написать текстовый файл как:

1234 
abc.com 

Тогда вы можете сделать это:

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

Это также сработало, но после замены значения порта в файле остальная часть строки в строке файла переходит к следующей строке. Но, спасибо, хотя. – bvr

Смежные вопросы