首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我希望我的代码能更好地与我的终端一起流动

我希望我的代码能更好地与我的终端一起流动
EN

Stack Overflow用户
提问于 2013-07-05 00:06:44
回答 4查看 140关注 0票数 2

所以我有一个全功能的py脚本在Ubuntu 12.04上运行,一切都很好。除了我不喜欢我的输入法之外,正如你将在下面看到的,它变得越来越烦人。在我输入代码之前,我应该说代码接受两个.img格式的图像,然后对它们进行计算。这就是我所拥有的:

代码语言:javascript
复制
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提供输入。换句话说,我希望能够在终端中输入以下内容

代码语言:javascript
复制
python myscript.py with the two images as input

这样,我就可以在指定路径和内容时使用终端的Tab键快捷键。有什么想法/建议吗?

编辑:好的,我研究了语法分析,我想我知道如何使用它了。下面是我的代码:

代码语言:javascript
复制
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上执行操作。这是可以实现的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-05 01:56:57

既然解析代码已经存在,那么您所需要做的就是使用Python的sys module接受命令行参数

代码语言:javascript
复制
import sys

first  = sys.argv[1]
second = sys.argv[2]

或者,更一般地说:

代码语言:javascript
复制
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)

备注

答案的第一部分为您提供了接受命令行参数所需的内容。第二部分介绍了一些处理它们的有用概念:

  1. 将python文件作为脚本运行时,全局变量__name__设置为'__main__'。如果使用if __name__ == '__main__'子句,则可以将python文件作为脚本运行(在这种情况下,该子句会执行),也可以将其作为模块导入(在这种情况下,不会)。您可以阅读有关它的更多信息,here.
  2. It习惯于打印用法消息,并在脚本调用错误时退出。变量sys.argv被设置为命令行参数列表,并且它的第一项始终是脚本路径,因此len(sys.argv) < 2表示没有传递任何参数。如果您只需要两个参数,则可以使用包含实际命令行参数的instead.
  3. sys.argv[1:] len(sys.argv) != 3。如果你只想要两个参数,你可以通过sys.argv[1]sys.argv[2]来引用它们,不要使用if os.path.exists(...)==Trueif string.endswith(...)==True语法。在没有参数的情况下编写if os.path.existsif string.endswith(...) instead.
  4. Using exit()要清晰得多,也更有Pythonic风格,缺省为exit(0),这意味着程序成功终止。如果您退出时出现错误消息,则应该使用exit(1) (或其他一些非零值...)相反,
票数 2
EN

Stack Overflow用户

发布于 2013-07-05 00:08:14

您希望在程序启动后解析命令行参数,而不是读取输入。

为此使用argparse module,或者自己解析sys.argv

票数 7
EN

Stack Overflow用户

发布于 2013-07-05 00:32:43

您想要做的是接受命令行参数,而最好的方法是使用一个名为argparse的漂亮模块。关于如何安装和使用它,我在下面列出了一个很好的参考资料。

Here是一个很棒的argparse资源。它是一个用于获取命令行参数的模块。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17474524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档