【问题标题】:How do I properly use the "--args" option when running "$ open myscript.py --args arg1 arg2" on command line在命令行上运行“$ open myscript.py --args arg1 arg2”时如何正确使用“--args”选项
【发布时间】:2015-12-19 17:21:59
【问题描述】:

我来 stackoverflow 已经有一段时间了,非常感谢这个令人难以置信的资源,因为它在无数场合都帮助了我,但这是我的第一个问题,所以请怜悯我 ;)

在使用“open”命令从命令行运行它时,我试图将命令行选项传递给我的 python 脚本。我知道我可以简单地使用 $ python myscript.py [arg1] [arg2] 但我真的想尽可能使用“打开”命令。

这是我的python脚本(myscript.py):

#!/usr/local/bin/python

import optparse
import sys

def main():
    parser = optparse.OptionParser()
    parser.add_option('--arg1', action="store", dest="arg1", type="int", default="0")
    parser.add_option('--arg2', action="store", dest="arg2", type="int", default="0")

    opts, remainder = parser.parse_args()

    print "Options: ",  str(opts)
    print "Remainders: ", str(remainder)
    print "Argv: ", sys.argv[:]

if __name__ == "__main__":
    main()

这是我在终端中运行的命令:

$ open -a terminal myscript.py --args --arg1=5 --arg2=10

然后输出:

Options:  {'arg1': 0, 'arg2': 0}
Remainders:  []
Argv:  ['/Users/test/Desktop/myscript.py']

所以脚本正在运行,但“--args”没有被传入,脚本只是使用参数的默认值! 以下是关于 open 命令的 --args 选项的文档:

--args All remaining arguments are passed in argv to the application's main() function instead of opened.

我已经尝试了各种方法来尝试让它工作,但我无法通过“open”将参数输入我的脚本。预先感谢您提供有关如何使其发挥作用的任何指导或建议。

【问题讨论】:

    标签: python macos command-line terminal args


    【解决方案1】:

    你的语法很好; open 将额外的参数传递给Terminal,但终端忽略了它们。例如,这只是打开一个 shell,不做任何回显:

    open -a terminal /bin/bash --args -c 'echo foo bar'
    

    如果您想在新的终端窗口中运行带有参数的命令,您需要做一些不同的事情。查看this question 的答案以获取想法。

    【讨论】:

    • 非常感谢马克的快速回复,我不敢相信我在研究中还没有遇到过这个话题。我会好好研究的。再次感谢,非常感谢您的帮助!
    【解决方案2】:

    虽然我仍然不清楚如何正确使用 open 命令的 --args 选项,但我找到了合适的解决方法。

    echo python /Users/test/Desktop/myscript.py --arg1=5 --arg2=10 > myscript.command; chmod +x myscript.command; open myscript.command
    

    然后输出:

    Options:  {'arg1': 5, 'arg2': 10}
    Remainders:  []
    Argv:  ['/Users/test/Desktop/opt.py', '--arg1=5', '--arg2=10']
    

    我最初想使用 open 命令的主要原因是打开一个新的终端窗口来运行带有参数的 myscript。这个变通方法做同样的事情,但只是创建一个终端 shell 脚本,使其成为 UNIX 可执行文件,并使用不带 --args 的“open”来使用 python 运行它。我仍然想了解如何将 --args 与 open 一起使用,以及为什么如果不即时创建一个完整的其他 shell 脚本就无法做到这一点,但我很高兴它弄清楚了;)非常感谢 Mark Reed为我指明了正确的方向!我希望有一天这也能帮助其他人。

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 2017-09-25
      • 2020-01-19
      • 1970-01-01
      • 2022-06-17
      • 2015-04-11
      • 2021-02-03
      • 2018-06-23
      • 2021-12-13
      相关资源
      最近更新 更多