2013-02-23 52 views
4

我已經編寫了一個彙編程序的代碼,但我仍然對python很陌生。
在我的代碼中,我有用戶輸入一個將被轉換成彙編語言的文件。我想我幾乎可以工作,但我無法弄清楚用戶輸入文件名的位置。
我在(我認爲是) IDLE,然後當我打F5它運行在shell中。我收到一個錯誤,但我很確定這是因爲沒有輸入文件名。用戶如何輸入文件名?

用戶應該在哪裏輸入這些東西?這是從python shell還是從命令行完成的,我是否需要將它轉換爲可執行文件?

有人可以幫助澄清用戶輸入所有這些信息?

我會放入一段代碼,雖然我不認爲有必要回答我的問題,但也許它會讓您更好地瞭解我的問題。

if __name__ == '__main__': 
import sys 

if len(sys.argv) == 1: 
    print 'need filename' 
    sys.exit(-1) 

table = SymbolTable() 
parser = Parser(sys.argv[1]) 
parser.advance() 
line = 0 

while parser.hasMoreCommands(): 
    if parser.commandType() == 'L_COMMAND': 
     table.addEntry(parser.symbol(), line) 
    else: 
     line += 1 

    parser.advance() 

code = Code() 
parser = Parser(sys.argv[1]) 
parser.advance() 

var_stack = 16 

while parser.hasMoreCommands(): 
    cmd_type = parser.commandType() 

    if cmd_type == 'A_COMMAND': 
     number = 32768 

     try: 
      addr = int(parser.symbol()) 
     except: 
      if table.contains(parser.symbol()): 
       addr = table.getAddress(parser.symbol()) 
      else: 
       table.addEntry(parser.symbol(), var_stack) 
       addr = var_stack 
       var_stack += 1 

     bin_number = bin(number | addr)[3:] 
     assembly = '0' + bin_number 
     print assembly 
    elif cmd_type == 'C_COMMAND': 
     assembly = '111' 
     assembly += code.comp(parser.comp()) 
     assembly += code.dest(parser.dest()) 
     assembly += code.jump(parser.jump()) 
     print assembly 

    parser.advance() 

要注意的部分是在開始的第4-6行,它檢查文件名。所以一旦我跑我的節目,我得到「需要文件名」打印到屏幕和看起來像這樣的錯誤消息:

Traceback (most recent call last): 
File "C:\Python27\Assembler.py", line 98, in <module> 
    sys.exit(-1) 
SystemExit: -1 

所以我在哪裏可以輸入文件名,以避免這個錯誤?

+0

你得到什麼錯誤?請發佈回溯。 – 2013-02-23 06:30:23

+0

@Joel Cornett錯誤在帖子中。它在代碼下面。對不起格式。我會編輯它。 – 2013-02-23 06:36:31

+0

啊,明白了。僅供參考,您可以通過以下方式使其顯示爲代碼:1)在編輯器中選擇文本後按{}}按鈕,2)將其縮進4個或更多空格,或者3)將相關文本放入反引號中。 – 2013-02-23 06:40:42

回答

7

你有它的方式,Python所預期的文件名作爲參數:

python file.py your_file.asm 

如果您想提示輸入一個文件名,使用raw_input()(或input()爲Python 3):

filename = raw_input('Enter a filename: ') or 'default_file.asm' 
+0

好的,所以我絕對希望它作爲一個參數。我會把'python file.py your_file.asm'放在命令提示符下嗎? – 2013-02-23 06:40:21

0

sys.argv包含命令行參數。
因此,如果沒有足夠的命令行參數,則此腳本必須通過命令行運行,以獲取輸入,如混合器所述,使用raw_input(或input)從用戶獲取輸入。

事情是這樣的:

if len(sys.argv) == 1: 
    print "You can also give filename as a command line argument" 
    filename = raw_input("Enter Filename: ") 
else: 
    filename = sys.argv[1] 

,並更改行

parser = Parser(sys.argv[1]) 

parser = Parser(filename) 
相關問題