2016-05-16 129 views
0

如何將輸入參數值與文件進行比較,以便文件中的行順序「受到尊重」。例如:將輸入與文件進行比較並遵循序列

文件sequence.txt具有以下enteries

aaa 
bbb 
ccc 
ddd 

和輸入即將像這樣(昏迷):

./run.py -c migrate -s ddd,bbb 

然後輸出是這樣的:

bbb 
ddd 

這是我迄今爲止工作的腳本

#!/usr/bin/python 

import sys 
import getopt 
import time 
import os 

def main(argv): 
    cmd = '' 
    schemas = '' 

    script_dir = os.path.dirname(__file__) 
    seq_file = "system/sequence.txt" 
    abs_file_path = os.path.join(script_dir, seq_file) 

    try: 
     opts, args = getopt.getopt(argv,"h:c:s",["cmd=","schemas="]) 
    except getopt.GetoptError: 
     print './run.py -c=<command> -s=<schemas> ' 
     sys.exit(2) 

    for opt, arg in opts: 
     if opt == '-h': 
      print './run.py -c=<command> -s=<schemas>' 
      sys.exit() 
     elif opt in ("-c", "--cmd"): 
      cmd = arg 
     elif opt in ("-s", "--schemas"): 
      schemas = arg 
    if cmd == "migrate" : 
     with open(abs_file_path) as z: 
      for line in z: 
      print line.rstrip('\n') 

if __name__ == "__main__": 
    main(sys.argv[1:]) 

我知道我必須在位置print line.rstrip('\n')做比較,但我不知道該怎麼做。有什麼建議麼?

此外,如果-c具有「遷移」值,我該如何使-s開關強制切換?

在此先感謝。

+1

我強烈建議考慮['argparse'](https://docs.python.org/2/library/argparse.html)模塊和在這種情況下[子命令(HTTPS: //docs.python.org/2/library/argparse.html#sub-commands)。 –

+0

謝謝Ilja的建議。我不知道這些,因爲我對python相當陌生,並且還有2天的時間來完成這個工作並推動測試。猜猜我要在這兩個燃燒午夜油:-) – Jaanna

回答

1

您需要檢查序列的當前行是否使用-s標誌指定。因此,您需要修改schemas值,以便它是一個包含所有模式的列表,然後您可以檢查當前行是否等於其中一個模式。至於你的第二個問題,我不熟悉getopt,但你可以簡單地檢查當-cmigrate並且執行適當的錯誤處理時模式是否爲空。

[...] 
schemas = [] 
[...] 
    elif opt in ("-s", "--schemas"): 
     schemas = arg.split(',') 
[...] 
if cmd == 'migrate': 
    if not schemas: # list is empty 
     # do error handling 
    for line in z: 
     if line in schemas: 
      print line 
+0

謝謝..是的,這工作。 – Jaanna

相關問題