Python argv与原始输入
我知道当使用Python argv与原始输入,python,argv,raw-input,Python,Argv,Raw Input,我知道当使用argv时,我必须将文件作为参数键入(例如:python ex15.py ex15_sample.txt),当使用raw_input时,我输入文件名作为输入 但我似乎不明白为什么一种获取文件名的方法比另一种更好。有人能解释一下原因吗?这是因为如果交互式用户输入不是一项关键功能,您通常应该避免使用它。在您的示例中:从stdin或命令行读取允许组合不同的程序并在脚本中运行它们,等等 想象一下,您执行了大量代码,坐在屏幕前等待输入请求的到来。在命令行中指定所有相关信息,然后去准备一杯咖啡,
argv
时,我必须将文件作为参数键入(例如:python ex15.py ex15_sample.txt
),当使用raw_input
时,我输入文件名作为输入
但我似乎不明白为什么一种获取文件名的方法比另一种更好。有人能解释一下原因吗?这是因为如果交互式用户输入不是一项关键功能,您通常应该避免使用它。在您的示例中:从stdin或命令行读取允许组合不同的程序并在脚本中运行它们,等等 想象一下,您执行了大量代码,坐在屏幕前等待输入请求的到来。在命令行中指定所有相关信息,然后去准备一杯咖啡,不是更好吗 你能做的是:
- 检查len(argv)>1
- 如果是,请使用argv[1]作为文件名
- 如果没有,请询问用户
try:
fn = argv[1]
except IndexError:
fn = raw_input("filename > ")
这是因为,如果交互用户输入不是一个关键特性,那么通常应该避免交互用户输入。在您的示例中:从stdin或命令行读取允许组合不同的程序并在脚本中运行它们,等等 想象一下,您执行了大量代码,坐在屏幕前等待输入请求的到来。在命令行中指定所有相关信息,然后去准备一杯咖啡,不是更好吗 你能做的是:
- 检查len(argv)>1
- 如果是,请使用argv[1]作为文件名
- 如果没有,请询问用户
try:
fn = argv[1]
except IndexError:
fn = raw_input("filename > ")
作为命令行参数输入的一部分,用户可以提交系统调用,这可能会使程序崩溃。例如,用户可以发出ls命令。无论您的程序应该做什么,系统都会执行该命令。作为命令行参数输入的一部分,用户可以提交系统调用,这可能会使您的程序崩溃。例如,用户可以发出ls命令。无论您的程序应该做什么,系统都会执行该命令。“我似乎不明白为什么一种获取文件名的方法比另一种更好。”?这就是问题所在吗?代码并不重要?你是在问交互和命令行之间的折衷吗?如果是这样的话,也许你可以删除代码,因为这对你的问题并不重要。“我似乎不明白为什么一种获取文件名的方法比另一种更好。”?这就是问题所在吗?代码并不重要?你是在问交互和命令行之间的折衷吗?如果是这样,也许你可以删除代码,因为这对你的问题并不重要。我从不使用命令行界面,即使我的脚本需要运行参数,因为我更喜欢直接在脚本上编写它们,然后直接从编辑器中运行。这样,“工作”版本将自动保存并可供重用或修改。但这纯粹是一个偏好的问题。想象一下,每当你想更改目录或复制文件时,你必须重新编译
cp
或cd
。然后你发现你还必须重新编译gcc
,因为这样你会发疯的:)@wal-o-mat非常感谢@wal-o-mat:这就是解释语言的美妙之处:没有编译时间!我喜欢Python。但我认识到我应该养成在脚本/程序中加入命令行参数的习惯。这是最佳实践。我从不使用命令行界面,即使我的脚本需要运行参数,因为我更喜欢直接在脚本上编写参数,然后直接从编辑器中运行。这样,“工作”版本将自动保存并可供重用或修改。但这纯粹是一个偏好的问题。想象一下,每当你想更改目录或复制文件时,你必须重新编译cp
或cd
。然后你发现你还必须重新编译gcc
,因为这样你会发疯的:)@wal-o-mat非常感谢@wal-o-mat:这就是解释语言的美妙之处:没有编译时间!我喜欢Python。但我认识到我应该养成在脚本/程序中加入命令行参数的习惯。这是最佳做法。