Python argparse и Unix трубопровод к аргументам - PullRequest
2 голосов
/ 28 марта 2012

Предположим, я хочу, чтобы вывод rsgen.py использовался в качестве аргумента references моего скрипта simulate.py. Как мне это сделать?

В simulate.py

parser.add_argument("references", metavar="RS", type=int, nargs="+", help="Reference string to use")

Я пытался

# ./simulate.py references < rs.txt 
usage: simulate.py [-h] [--numFrames F] [--numPages P] RS [RS ...]
simulate.py: error: argument RS: invalid int value: 'references'

# ./simulate.py < rs.txt 
usage: simulate.py [-h] [--numFrames F] [--numPages P] RS [RS ...]
simulate.py: error: too few arguments

Я считаю, что мой синтаксис трубопровода неправильный, как я могу это исправить?

В идеале я хочу напрямую передать вывод из rsgen.py в аргумент references simulate.py

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

Если вам нужно дать вывод rsgen.py в качестве аргумента, лучшее решение - использовать подстановка команд .Синтаксис зависит от используемой вами оболочки, но для большинства современных оболочек будет работать следующее:

./simulate.py references $(./rsgen.py) 

Примечание: в ответе Брайана Свифта для подстановки команд используются обратные галочки.Синтаксис действителен также для большинства оболочек, но имеет недостаток, заключающийся в том, что он не очень хорошо вложен.

С другой стороны, если вы хотите перенаправить вывод скрипта в другой, вы должны прочитатьот sys.stdin

Пример:

a.py

print "hello world"

b.py

import sys

for i in sys.stdin:
    print "b", i

результат :

$ ./a.py | ./b.py
b hello world
3 голосов
/ 28 марта 2012

Если вы хотите использовать выходные данные rsgen.py в качестве параметров командной строки для simulate.py, используйте обратные кавычки, которые запускают содержащуюся команду, и поместите выходные данные в командную строку

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