2015-12-19 7 views
0

Я уже некоторое время приезжаю в stackoverflow и очень благодарен за этот невероятный ресурс так как это помогло мне в бесчисленных случаях, но это мой первый вопрос, поэтому, пожалуйста, помилуй меня;)

Я пытаюсь передать параметры командной строки в свой скрипт python при запуске из командной строки с помощью «open ". Я понимаю, что я могу просто использовать $ python myscript.py [arg1] [arg2], но я действительно пытаюсь использовать команду «open», если это возможно.

Вот мой питон скрипт (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» не передаются, и скрипт просто использует значения по умолчанию для argum Энты! Вот документация по --args опции для открытой команды:

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

Я перепробовал все виды вещей, чтобы попытаться получить эту работу, но я не могу получить аргументы в мой сценарий, с помощью «открыть». Заранее благодарю вас за любые рекомендации или рекомендации о том, как заставить это работать.

ответ

1

Ваш синтаксис прекрасен; open передает дополнительные аргументы Terminal, но Terminal игнорирует их. Например, это просто открывает оболочку, и не делать каких-либо эхо:

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

Вам нужно сделать что-то другое, если вы хотите запустить команду с аргументами в новом окне терминала. Ознакомьтесь с ответами на вопросы this question.

+0

Большое спасибо за быстрый ответ Марк, я не могу поверить, что еще не наткнулся на эту тему в своих исследованиях. Я изучу это. Еще раз спасибо, я очень ценю помощь! –

0

Хотя я до сих пор неясно, как правильно использовать параметр -args для команды open, я нашел подходящую работу.

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'] 

Основная причина, которую я изначально хотел использовать открытую команду было открыть новое окно терминала для запуска MyScript с аргументами. Эта работа делает то же самое, но просто создает сценарий оболочки терминала, делает его исполняемым UNIX, использует «open» без -args для запуска его с помощью python. Я все равно хотел бы понять, как использовать -args с open, а также почему это невозможно сделать без создания целого другого сценария оболочки на лету, но я просто счастлив, что его выяснили;) Большое спасибо Mark Reed для указания меня в правильном направлении! Надеюсь, это тоже поможет кому-то еще.