运行“$open”时如何正确使用“args”选项myscript.py文件args arg1 arg2“在命令行上

2024-03-28 12:37:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我来stackoverflow已经有一段时间了,我非常感谢这个不可思议的资源,因为它在无数场合帮助了我,但这是我的第一个问题,所以请宽恕我;)

当用“open”命令从命令行运行python脚本时,我试图将命令行选项传递给python脚本。我知道我可以简单地使用$pythonmyscript.py文件[arg1][arg2]但是如果可能的话,我确实在尝试使用“open”命令。你知道吗

这是我的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.

我已经尝试了各种各样的事情,试图让这个工作,但我不能让参数进入我的脚本通过“开放”。提前感谢您对如何让这项工作的任何指导或建议。你知道吗


Tags: 文件命令行pyimport命令脚本parsermain
2条回答

虽然我仍然不清楚如何正确地使用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可执行文件,使用“open”而不使用args来用python运行它。我仍然想了解如何使用args和open,以及为什么不创建一个完整的shell脚本就不可能做到这一点,但我只是很高兴它被发现;)非常感谢Mark Reed为我指明了正确的方向!我希望有一天这也能帮助别人。你知道吗

您的语法很好;open正在将额外的参数传递给Terminal,但是Terminal正在忽略它们。例如,这只是打开一个shell,不进行任何回音:

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

如果要在新的终端窗口中运行带参数的命令,则需要执行一些不同的操作。查看this question的答案以获取想法。你知道吗

相关问题 更多 >