在python中通过命令行传递的参数

时间:2013-01-15 09:29:26

标签: python python-2.7

这个问题可能是一个愚蠢的问题。因为我是这个蟒蛇的新手,请在这个问题上帮助我。

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

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

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

  

“输入文件的路径..”

显示此行后

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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

答案 2 :(得分:0)

  

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

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

您可能需要添加一个函数,该函数从ossys模块调用相应的子例程,并进行自定义完成。

Here你可以找到我的意思,希望它有所帮助。

答案 3 :(得分:0)

某种不太相关的东西

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

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

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