用户如何输入文件名?

时间:2013-02-23 06:27:13

标签: python io

我为汇编程序编写了代码,但我仍然是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

那么在哪里可以输入文件名以避免此错误?

2 个答案:

答案 0 :(得分:7)

你拥有它的方式,Python期望文件名作为参数:

python file.py your_file.asm

如果要提示输入文件名,请使用raw_input()(或{3}}用于Python 3):

input()

答案 1 :(得分:0)

sys.argv包含命令行参数 所以,这个脚本必须通过命令行运行,以便获取输入,如blender所说,如果没有足够的命令,使用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)