用户如何输入文件名?
我写了一个汇编器的代码,但我对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'