Гораздо лучший способ сделать это - библиотека argparse . Библиотека envoy wrapper упрощает работу с подпроцессом .
Простой пример:
import argparse
import envoy
def main(**kwargs):
for key, value in kwargs.iteritems():
print key, value
cmd = '{0} {1}'.format(kwargs['program'], ' '.join(kwargs['infiles']))
r = envoy.run(cmd)
print r.std_out
print r.std_err
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Get a program and run it with input', version='%(prog)s 1.0')
parser.add_argument('program', type=str, help='Program name')
parser.add_argument('infiles', nargs='+', type=str, help='Input text files')
parser.add_argument('--out', type=str, default='temp.txt', help='name of output file')
args = parser.parse_args()
main(**vars(args))
Это считывает аргументы, анализирует их, а затем отправляет их методу main в виде словаря ключевых слов и значений. Это позволяет вам тестировать ваш метод main независимо от кода аргумента, передавая предварительно составленный словарь.
Основной метод выводит ключевые слова и значения. Затем он создает командную строку и передает ее посланнику для запуска. Наконец, он печатает вывод команды.
Если у вас установлен pip, посланник может быть установлен с pip install envoy
. Самый простой способ получить pip - это pip-installer .