我正在使用Python,並且編寫了自己的腳本,允許我檢查程序運行時提供的參數。下面的我想要實現的一個例子:將代碼存儲在字典中
python file.py -v -h anotherfile.py
或
./file.py -v -h anotherfile.py
在這兩種情況下,-v
和-h
參數,打印出的模塊版本,和基本的幫助文件。我已經有了區分參數和文件的代碼,除了我想在這個問題上創建一個通用模塊。
寫在Java的
// Somewhere.
public static HashMap<String, Runnable> args = new HashMap<String, Runnable>();
public void addArgument(String argument, Runnable command) {
if (argument.length() > 0) {
if (args.get(argument) == null) {
args.put(argument, command);
} else {
System.err.println("Cannot add argument: " + argument + " to HashMap as the mapping already exists.");
// Recover.
}
}
}
// Somewhere else.
foo.addArgument("-v",() -> {System.out.println("version 1.0");});
foo.args.get("-v").run();
下面的代碼 - 將會運行Lambda表達式(ATLEAST這是我閱讀研究的話題時,他們)成功。我不知道Lambda表達式是如何工作的,並且只具有使用它們的基本知識。
這個問題的關鍵是,我如何在Python中實現類似Java示例的東西,將任何類型的代碼存儲在數組中?
的事情是與Java例子不過,如果我有在執行addArgument
並使用i
莫名其妙或更確切地說,包含類addArgument
知道使用i
從調用它的一個類中定義int i = 0;
。我擔心這可能不是Python的情況...
我希望能夠將它們存儲在字典或其他類型的基於鍵的數組中,所以我可以將它們存儲在以下方式:
# Very rough example on the latter argument, showing what I'm after.
addoption("-v", print("version 1.0"))
編輯:什麼,我想舉例:(不工作的是)(請忽略;公司)
args = {};
def add(argument, command):
args[argument] = lambda: command; # Same problem when removing 'lambda:'
def run():
for arg in args:
arg(); # Causing problems.
def prnt():
print("test");
add("-v", prnt);
run();
我如何將純文件的內容打印爲參數的動作? – finnrayment
你可以定義一個函數來做到這一點,然後當參數解析器包含相應的開關時調用它。你是否也想在命令行上指定文件名? – xnx
當然。我創建了一個通用模塊,我可以在其中**指定**任何和所有**參數**和文件**的任何**動作。 – finnrayment