2013-02-20 2 views
0

Я просматривал различные сообщения, чтобы узнать, был ли задан этот вопрос. Но либо я не мог понять ответ, который смотрел на меня, или точный вопрос, который у меня в голове не задавался раньше.Python - Постановка командной строки Аргументы - в "из X import A"

Вопрос: Я создал программу под названием «Filter.py», целью которой является принятие файла в качестве аргумента командной строки, например «Flags.txt», использование этого файла для выполнения большого количества «фильтрации». например. Загружается массив A. Подмножество A_1 создано, удовлетворяющее некоторым условиям, A_2, удовлетворяющим другому набору и т. Д. Я хочу, чтобы эти массивы A_1, A_2 были доступны в других программах. Итак, я говорю в другой программе

from Filter import * 

Вышеуказанные работы до тех пор, как «Filter.py» запрограммирован на работу, даже если аргумент командной строки не предусмотрена. Вопрос: при импорте с использованием вышеуказанного метода могу ли я передать аргументы командной строки?

+0

Ваш вопрос, кажется неясным, и нет никаких ограничений вообще передать аргументы командной строки> при передаче аргументов командной строки, вы можете получить доступ к ним из «sys.argv» –

+0

Ну , Извините, если я не могу ответить на вопрос. Позвольте мне снова попытаться. Программа P принимает A, B и C как аргументы командной строки, и эти аргументы являются обязательными i, e. предположим, что программа нуждается в них любой ценой. При выполнении в одиночку, я мог бы сказать, 'питона P.py ABC' Но когда в программе Q.py, я говорю, ' от P импорта * ' программа не работает, так как A, B и C аргументы не предусмотрены. Я хочу знать, может ли что-то вроде 'от импорта P A B C *' ? – Killer

+0

Нет, что это невозможно и неправильный синтаксис, то есть "из P A B C import *" –

ответ

1

№. Лучший способ состоит в том, чтобы обернуть вашу функциональность функцией (назовем ее main) в вашем скрипте Filter.py, который делает все. И добавить следующее:

# Filter.py 
#... 

if __name__ == '__main__': 

    # ... 

    main(some, args) 

Таким образом, звонок из командной строки:

python Filter.py 

выполнит main. И если вы хотите, чтобы импортировать его в другой скрипт (главным образом, не будет вызван):

# your other program 
import Filter 

# ... 

Filter.main(some, args) 
+0

Большое спасибо за ваш ответ. Ну, мне кажется, что я должен перекопировать программу 'Filter.py', чтобы преодолеть это ограничение. Не уверен, сколько людей считают, что это ограничение. Я честно надеялся на что-то вроде 'from 'Filter A B C" import * '. В любом случае, теперь, когда я знаю, что это невозможно, позвольте мне вернуться к изменению кода моей программы. Опять же, большое вам спасибо. – Killer

+0

На самом деле, в большинстве случаев вам нужно только реорганизовать свой код.Поверните несколько больших функций в более мелкие, измените 'sys.argv' на массив с именем' arguments' или что-то в этом роде. – dmg

0

Я не знаю, как вы ваша программа создана в Filter.py

Но можно просто обернуть алгоритм в функции и передать аргументы в вызове функции

например.

from Filter import filter 
result = filter(argA, argB, argC) 
+0

Спасибо за вышеупомянутое предложение. На самом деле моя программа полна массивов A, B, C, D, E ... и коды идут что-то для i в диапазоне (len (A)): if ... ... A_1.append else A_2.append else A_3.append ... '(я широко использую Python для анализа данных, следовательно, большое количество массивов и фильтров). Еще раз спасибо за вашу помощь. – Killer

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