用户如何输入文件名?

4 投票
2 回答
45739 浏览
提问于 2025-04-17 16:51

我写了一个汇编器的代码,但我对Python还不太熟悉。
在我的代码中,用户需要输入一个文件,这个文件会被转换成汇编语言。我觉得我的代码快要能运行了,但我不知道用户在哪里输入文件名。
我现在在(我认为是) IDLE里,当我按F5时,它会在命令行中运行。我遇到了一个错误,但我很确定这是因为没有输入文件名。

用户应该在哪里输入这些信息呢?是在Python的命令行里,还是在命令提示符下?我需要把它变成一个可执行文件吗?

有没有人能帮我弄清楚用户应该在哪里输入这些信息?

我会放一段代码,虽然我觉得这段代码对回答我的问题没什么帮助,但也许能让你更好地理解我的问题。

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 个回答

1

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)
8

你现在的写法是,Python 需要你提供一个文件名作为参数:

python file.py your_file.asm

如果你想要让用户输入一个文件名,可以使用 raw_input()(如果你用的是 Python 3,就用 input()):

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

撰写回答