所以我有一个全功能的py脚本在Ubuntu 12.04上运行,一切都很好。除了我不喜欢我的输入法之外,正如你将在下面看到的,它变得越来越烦人。在我输入代码之前,我应该说代码接受两个.img格式的图像,然后对它们进行计算。这就是我所拥有的:
import os
first = raw_input("Full path to first .img file: ")
second = raw_input("Full path to second .img file: ")
print " "
if os.path.exists(first) == True:
if first.endswith('.img') == False:
print 'You did not give a .img file, try running again'
os.sys.exit()
elif os.path.exists(second) == True:
if second.endswith('.img') == False:
print 'You did not give a .img file, try running again'
os.sys.exit()
else:
print "Your path does not exist, probably a typo. Try again"
os.sys.exit()这就是我想要的;我希望能够直接从终端为python提供输入。换句话说,我希望能够在终端中输入以下内容
python myscript.py with the two images as input这样,我就可以在指定路径和内容时使用终端的Tab键快捷键。有什么想法/建议吗?
编辑:好的,我研究了语法分析,我想我知道如何使用它了。下面是我的代码:
import argparse
import nipy
parser = argparse.ArgumentParser()
parser.add_argument("-im", "--image_input", help = "Feed the program an image", type = nipy.core.image.image.Image, nargs = 2)但是,现在我希望能够在脚本中使用这些文件,只需这样说: first = parser second = parse1,然后在first和second上执行操作。这是可以实现的吗?
发布于 2013-07-05 01:56:57
既然解析代码已经存在,那么您所需要做的就是使用Python的sys module接受命令行参数
import sys
first = sys.argv[1]
second = sys.argv[2]或者,更一般地说:
import os
import sys
if __name__ == '__main__':
if len(sys.argv) < 2:
print('USAGE: python %s [image-paths]' % sys.argv[0])
sys.exit(1)
image_paths = sys.argv[1:]
for image_path in image_paths:
if not os.path.exists(image_path):
print('Your path does not exist, probably a typo. Try again.')
sys.exit(1)
if image_path.endswith('.img'):
print('You did not give a .img file, try running again.')
sys.exit(1)备注
答案的第一部分为您提供了接受命令行参数所需的内容。第二部分介绍了一些处理它们的有用概念:
__name__设置为'__main__'。如果使用if __name__ == '__main__'子句,则可以将python文件作为脚本运行(在这种情况下,该子句会执行),也可以将其作为模块导入(在这种情况下,不会)。您可以阅读有关它的更多信息,here.sys.argv被设置为命令行参数列表,并且它的第一项始终是脚本路径,因此len(sys.argv) < 2表示没有传递任何参数。如果您只需要两个参数,则可以使用包含实际命令行参数的instead.sys.argv[1:] len(sys.argv) != 3。如果你只想要两个参数,你可以通过sys.argv[1]和sys.argv[2]来引用它们,不要使用if os.path.exists(...)==True和if string.endswith(...)==True语法。在没有参数的情况下编写if os.path.exists和if string.endswith(...) instead.exit()要清晰得多,也更有Pythonic风格,缺省为exit(0),这意味着程序成功终止。如果您退出时出现错误消息,则应该使用exit(1) (或其他一些非零值...)相反,发布于 2013-07-05 00:08:14
您希望在程序启动后解析命令行参数,而不是读取输入。
为此使用argparse module,或者自己解析sys.argv。
发布于 2013-07-05 00:32:43
您想要做的是接受命令行参数,而最好的方法是使用一个名为argparse的漂亮模块。关于如何安装和使用它,我在下面列出了一个很好的参考资料。
Here是一个很棒的argparse资源。它是一个用于获取命令行参数的模块。
https://stackoverflow.com/questions/17474524
复制相似问题