0

这个问题可能是一个愚蠢的问题。由于我是这个 python 的新手,请在这个问题上帮助我。

if __name__== '__main__' :
    path=sys.argv[1]

在上面的代码中,我从命令行读取参数。我的论点是系统中某个文件的路径。当我不提供参数时,它会引发错误“列表索引超出范围”

而不是从命令行读取,我想以下列方式输入

“输入文件路径..”

在显示此行之后,我如何通过按 Tab 并以路径作为输入来解析文件系统?

4

4 回答 4

2

sys.argv只是一个列表,说它sys.argv[1]与说args = [0]; args[1]你需要检查索引是否1确实存在相同

于 2013-01-15T09:31:10.753 回答
0

尝试这个:

path = raw_input("enter path to your file..")

print path

如果您正在使用命令行参数hello.py myfile.txt,则使用

if len(sys.argv) > 1:
    path = sys.argv[1]

更新:

如果您需要向用户显示目录中的所有文件。用这个:

import os

i = 1

for item in os.listdir("F:/python/Lib"):
    if os.path.isfile(os.path.join("F:/python/Lib", item)):
        print str(i) + " : " + item
        i += 1

输出:

>>> 
1 : abc.py
2 : abc.pyc
3 : aifc.py
4 : antigravity.py
5 : anydbm.py
6 : argparse.py
7 : ast.py
8 : asynchat.py
9 : asyncore.py
10 : atexit.py
11 : atexit.pyc
12 : audiodev.py
13 : base64.py
14 : base64.pyc
15 : BaseHTTPServer.py
16 : BaseHTTPServer.pyc
17 : Bastion.py
18 : bdb.py
19 : bdb.pyc
于 2013-01-15T09:32:07.447 回答
0

我如何通过按 Tab 键解析文件系统并将路径作为输入

这不是一件容易的事,因为您按下选项卡意味着完成,这是在bashbatch级别(您正在运行 python 程序的终端)上完成的。

您可能需要添加一个从osandsys模块调用适当子例程的函数,并执行自定义完成。

在这里你可以找到我的意思的想法,希望它有帮助。

于 2013-01-15T09:37:50.367 回答
0

一些不太相关的东西

如果您想执行更复杂的命令行选项解析,请考虑使用argparse 模块

这是我制作的脚本中模块的简单演示:

import argparse

parser = argparse.ArgumentParser(description='MD5 Cracker')
parser.add_argument('target', metavar='Target_MD5_Hash', help='The target MD5 that you want to have cracked.')
parser.add_argument('--online', '-o', help='MD5 Cracker will try to crack the password using online MD5 cracking websites and databases', default=False)
parser.add_argument('--list', '-l', help='MD5 Cracker will try to crack the passwork offline with a dictionary attack using the list supplied', default=False)
parser.add_argument('--interactive', '-i', help='MD5 Cracker will enter interactive mode, allowing you to check passwords without reinitiating the software each time', default=False)

if __name__ == '__main__':
    cli_args = parser.parse_args()
    args_dict = cli_args.__dict__ # here it is cast into a dictionary to allow for easier manipulation of contents
于 2013-01-15T09:47:02.643 回答