2016-06-01 1 views
0

Я объединил два двоичных файла в один для файла compare.py для сравнения. Оба двоичных файла выполняют очень похожую работу, но используют два набора аргументов CLI. Е.Г.,Как объединить аргументы командной строки (флаги) для двух разных двоичных файлов в python

Первый питон двоичный Par: myPar -myParArgs_1 '1' -myParArgs_2 'a'

Второй каст бинарный Bin: myBin -myBinArgs_1 '1' -myBinArgs_2 'a'

В настоящее время я использую argparse модуль для определения myPar аргументы. Но я не знаю, как бороться со вторым двоичным кодом.

Есть ли способ объединить эти два, так что когда я укажу какие-либо аргументы CLI, оба двоичных файла будут делать то же самое и, наконец, могут генерировать отчет о сравнении.

Например, myMain -myMainArgs_1 '1' -myMainArgs_2 'a' вызовет оба двоичных файла с правильными аргументами соответственно.

+0

Что такое бинарный код python? –

+0

Основная функция, которая может считывать ввод CLI и анализировать вход для получения результата. Я добавил вторую двоичную информацию в эту основную функцию, используя 'subprocess.check_call', но я не знаю, как позволить второму двоичному файлу делать то же самое, что и 1-й двоичный код с данной командой. –

+0

Вы хотите, чтобы они делали то же самое или принимали те же аргументы? Если это эквивалентно, то они являются одной и той же программой. Если нет, то вы должны уточнить. –

ответ

1

Вы можете написать третий скрипт, будь то python, bash или командный файл (в зависимости от ОС), который принимает указанный набор аргументов и вызывает каждый бинарный порядок соответственно.

В питоне должно выглядеть как

from sys import argv 
import subprocess 
call_args = sys.argv[1:] #first position is script name 
subprocess.call(['myPar'] + call_args) 
subprocess.call(['myBin'] + call_args) 
0

Родитель сценарий может порождать другие сценарии с использованием пакета подпроцесс. Самым популярным является Popen и вызова (вызов является применение Popen)

Ссылка: https://docs.python.org/2/library/subprocess.html

**(For example, @compare.py -------------------)** 
import os 
from subprocess import * 

outputPar = Popen([r'C:\myPar.py', <your argument (flags)>], *shell=True,* stdin=PIPE, stdout=PIPE).communicate() 
outputBin = Popen([r'C:\myBin.py', <your argument (flags)>], *shell=True,* stdin=PIPE, stdout=PIPE).communicate() 
... process outputs ... 

С немного больше комментариев:

1) Shell = True может не очень хорошая идея с предупреждением безопасности

Предупреждение: Передача оболочки = Истина может быть опасной для безопасности в сочетании с ненадежным входом. Подробнее см. В разделе «Часто используемые аргументы». (https://docs.python.org/2/library/subprocess.html)

2) относительно метода Popen.communicate (вход = нет), Взаимодействие с процессом: Отправить данные для стандартного ввода. Прочитайте данные из stdout и stderr, пока не будет достигнут конец файла. Дождитесь завершения процесса до . Необязательный входной аргумент должен быть строкой, которая должна быть , отправленной дочернему процессу, или None, если никакие данные не должны быть отправлены на ребенка.

communicate() returns a tuple (stdout, stderr). 

Note: The data read is buffered in memory, so do not use this 
method if the data size is large or unlimited. 
Смежные вопросы