Запустите аргументы командной строки в скрипте Python - PullRequest
4 голосов
/ 15 октября 2010

У меня есть программа, которая запускается из командной строки, например:

python program.py 100 rfile

Как я могу написать новый сценарий, чтобы вместо запуска его просто с '100'аргумент, я могу запустить его последовательно со списком аргументов, таких как [50, 100, 150, 200]?

Редактировать: причина, по которой я спрашиваю, заключается в том, что я хочу записать, как «program.py» выполняется сразные аргументы.

Ответы [ 4 ]

8 голосов
/ 15 октября 2010

Если вы создадите файл bash, подобный этому

#!/bin/bash
for i in 1 2 3 4 5
do
  python program.py $i rfile
done

, тогда сделайте chmod +x для этого файла, при запуске он будет запускаться последовательно:

python program.py 1 rfile
python program.py 2 rfile
python program.py 3 rfile
python program.py 4 rfile
python program.py 5 rfile
6 голосов
/ 15 октября 2010

Вы можете использовать подход оболочки Devrim или изменить свой скрипт:

Если ваш оригинальный скрипт работал так:

import sys
do_something(sys.argv[1], sys.argv[2])

Вы можете выполнить то, что вы хотите, как это:

def main(args):
    for arg in args[:-1]:
        do_something(arg, args[-1])

if __name__ == '__main__':
    import sys
    main(sys.argv[1:])

Вы бы назвали это так:

python program.py 50 100 150 200 rfile

Я думаю, что вы хотите. Пожалуйста, уточните, если это не так.

4 голосов
/ 15 октября 2010

Вы можете использовать Optparse

Это позволяет вам использовать вашу программу следующим образом: python yourcode.py --input input.txt --output output.txt

Это замечательно, когда у вас есть несколько аргументов консоли.

Так что в вашем случае вы могли бы сделать что-то вроде:

parser.add_option("-i","--input", action="store", type="int", nargs=4, dest="mylist")

Теперь в вашей консоли вы можете набрать python program.py -i 50 100 150 200

Для доступа к входам вы можетеиспользуйте mylist как список.

2 голосов
/ 15 октября 2010

Если вы хотите сделать это в своем скрипте Python, вы можете организовать его для получения списка целых чисел, используя модуль argparse ( непроверенный код ):

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('rfile', type=argparse.FileType('r'))
parser.add_argument('numbers', nargs='+', type=int)
ns = parser.parse_args()

Такие действия обычно проводятся под эгидой функции main, как объяснил Джон-Эрик.

Если вы вызываете полученный скрипт из оболочкис

python the_script.py filename 1 2 3 4 5 6

вы получите ns.file, равный файлу filename, открытый для чтения, и ns.numbers, равный списку [1, 2, 3, 4, 5, 6].

argparse совершенно потрясающе и даже выводит информацию об использовании скрипта и его опциях, если вы вызываете его с помощью --help.Вы можете настроить его слишком многими способами, чтобы объяснить здесь, просто прочитайте docs .

argparse в стандартной библиотеке Python 2.7;для более ранних питонов он может быть установлен как модуль обычным способом, например, через easy_install argparse или в силу зависимости от пакета, частью которого является ваш скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...