通过命令提示符设置可选的系统参数



我正在做一个项目,在这个项目中,我想在script.py后面的cmd上指定一个系统参数。我的问题是,我想指定另一个可选的参数,用户可能想也可能不想给出这个参数。因此,我正在努力解决用户可能给出或不给出系统参数的问题,以及如何阅读这些信息。如果一切听起来都令人困惑,以下文本可能会澄清:用户在命令提示符上键入以下内容以运行程序:

python script.py file.txt

我想添加一个可能给出也可能不给出的论点,比如:

python script.py file.txt file_added.txt

当我在我的主脚本上阅读这些论点时,我认为这个问题会解决:

If sys.argv[2] is not None:
file2 = f"{sys.argv[2]}"

然而,在这样做的时候,我仍然会得到IndexError。那么,有没有一种简单的方法可以绕过这个问题呢?

如果sys.argv包含的项目少于2个,则会得到一个IndexError。因此,用try块包装语句

try:
filename = sys.argv[2]
except IndexError:
filename = None
if filename:
# ... do something

实现这一点的一种方法是检查sys.argv的长度。如果长度是3,您就会知道传递了第二个参数(3,因为第一个参数是script.py(。因此,大致如下:

if len(sys.argv) == 3:
file2 = f"{sys.argv[2]}"

这里,sys.argv[2] is not None您正在检查第三个元素是否为None,这就是问题所在。

您的索引超出了argv数组的长度,并且索引错误。

如果你只有最多2个输入,那么你可以像if len(sys.argv) == 3一样检查argv的长度,这意味着你已经得到了两个输入,然后你可以通过sys.argv[1]sys.argv[2]访问它们

您可以使用argsparse,这是python中的一个内置库,它可以轻松处理命令行参数。转到链接https://docs.python.org/3/library/argparse.html了解mor,但是用例的基本实现是这样的。

import argparse
parser = argparse.ArgumentParser(description='Enter filenames')
parser.add_argument('-file', type=str,help='enter the file name',dest='filename1')
parser.add_argument('--optional','--op',type=str, dest='filename2',help='enter optional filename')
args = parser.parse_args()
file1=args.filename1
file2=args.filename2

然后在cmd中,您可以将其调用为

python script.py -filename="file1.txt"

python script.py -filename="file1.txt" --optional="file2.txt"

python script.py -filename="file1.txt" --op="file2.txt"

您正在查找argv[1]argv[2]等。这应该有效:

for filename in sys.argv[1:]:
readfile(filename)

相关内容

  • 没有找到相关文章

最新更新